从JSON对象中删除键值对

kqqjbcuj  于 2022-12-27  发布在  其他
关注(0)|答案(7)|浏览(273)

下面是这个JSON对象;

[
    {
        XXX: "2",
        YYY: "3",
        ZZZ: "4"
    },
    {
        XXX: "5",
        YYY: "6",
        ZZZ: "7"
    },
    {
        XXX: "1",
        YYY: "2",
        ZZZ: "3"
    }
]

我想从json对象中删除YYY键-值,这样新的json对象看起来就像这样;

[
    {
        XXX: "2",       
        ZZZ: "4"
    },
    {
        XXX: "5",       
        ZZZ: "7"
    },
    {
        XXX: "1",       
        ZZZ: "3"
    }
]

我试过delete jsonObject['YYY'],但这是不正确的。这怎么能在javascript中完成呢?谢谢。

gmol1639

gmol16391#

所谓的“JSON对象”实际上是一个JSON对象数组,必须逐个迭代并删除每个成员:

for(var i = 0; i < jsonArr.length; i++) {
    delete jsonArr[i]['YYY'];
}
zwghvu4y

zwghvu4y2#

另一种避免改变原始数组并使用更现代的特性(对象静止操作符和解构)的解决方案

const arr = [
    {
        XXX: "2",
        YYY: "3",
        ZZZ: "4"
    },
    {
        XXX: "5",
        YYY: "6",
        ZZZ: "7"
    },
    {
        XXX: "1",
        YYY: "2",
        ZZZ: "3"
    }
]

// destructure 'YYY' and return the other props only
const newArray = arr.map(({YYY, ...rest}) => rest)

console.log(newArray)
2ul0zpep

2ul0zpep3#

迭代数组中的值,并使用键YYY删除值:

var obj = [
    {
        XXX: "2",
        YYY: "3",
        ZZZ: "4"
    },
    {
        XXX: "5",
        YYY: "6",
        ZZZ: "7"
    },
    {
        XXX: "1",
        YYY: "2",
        ZZZ: "3"
    }
];

for (var i = 0; i < obj.length; i++) {
    delete obj[i].YYY
}
lf3rwulv

lf3rwulv4#

由于JSON位于数组内部,因此需要访问数组中的每个元素并删除其属性“YYY”或使用map创建一个简化对象,如下所示:

var objs = [
    {
        XXX: "2",
        YYY: "3",
        ZZZ: "4"
    },
    {
        XXX: "5",
        YYY: "6",
        ZZZ: "7"
    },
    {
        XXX: "1",
        YYY: "2",
        ZZZ: "3"
    }
];

objs = objs.map(function(obj) {
    return { XXX: obj.XXX, ZZZ: obj.ZZZ };
});

使用map函数。MDN: Array.prototype.map()

lfapxunr

lfapxunr5#

jsonObject是一个数组,因此需要引用数组元素。尝试delete jsonObject[0].YYY

dgjrabp2

dgjrabp26#

JSON是文本,所以如果你真的有这样的文本:

var s = '[{XXX:"2",YYY:"3",ZZZ:"4"},{XXX:"5",YYY:"6",ZZZ:"7"},{XXX:"1",YYY:"2",ZZZ:"3"}]';

然后你可以使用字符串替换来删除YYY,类似于:

s.replace(/YYY[^,}]+,/g,''); // [{XXX:"2",ZZZ:"4"},{XXX:"5",ZZZ:"7"},{XXX:"1",ZZZ:"3"}]

你可能还需要考虑字符串开头或结尾的YYY。如果你有一个由对象字面值创建的对象,那么使用其他答案之一。

uelo1irk

uelo1irk7#

你可以使用javascript数组的map方法。

var array = [{
    XXX: "2",
    YYY: "3",
    ZZZ: "4"
},{
    XXX: "5",
    YYY: "6",
    ZZZ: "7"
},{
    XXX: "1",
    YYY: "2",
    ZZZ: "3"
}];
var new_array = array.map(function(obj){
    return {'XXX':obj.XXX,'ZZZ':obj.ZZZ};
});

所需的数组存储在new_array变量中。

相关问题