删除数组中的对象
2021-01-12
75
我有这个对象:
const data = { theValues: [
{key1: "valueOne",
key2: "someValue"},
{key1: "valueTwo",
key2: "moreValue"}]};
如果我使用以下内容:
data.theValues = data.theValues.filter(obj => obj.key1 != 'valueOne');
我得到的结果如下:
const data = { theValues: [
{key1: "valueTwo",
key2: "moreValue"}]};
好的,这也是我想要的。但如果我有这个对象:
const data = { theValues: [
{key1: ["valueOne", "valueTwo"],
key2: "otherValue"},
{key1: ["valueThree","valueFour"],
key2: "noValue"}]};
我使用同样的东西:
data.theValues = data.theValues.filter(obj => obj.key1 != 'valueOne');
什么都没有发生。为什么会这样?我该如何删除值为“valueOne”的对象?
3个回答
由于
key
的值是一个数组,因此无法将其与字符串进行比较 -
obj.key1 != 'valueOne'
始终为
true
。使用
Array.includes()
检查数组是否包含术语 (
valueOne
):
const data = {"theValues":[{"key1":["valueOne","valueTwo"],"key2":"otherValue"},{"key1":["valueThree","valueFour"],"key2":"noValue"}]};
const result = data.theValues.filter(obj => !obj.key1.includes('valueOne'));
console.log(result);
Ori Drori
2021-01-12
发生这种情况是因为
key1
是数组,而不是对象的键。因此,您可以使用
indexof
方法获得所需结果:
const result = data.theValues.filter(obj => obj.key1.indexOf('valueOne'));
示例:
const data = { "theValues":
[
{ "key1": ["valueOne", "valueTwo"], "key2": "otherValue" }
, { "key1": ["valueThree", "valueFour"], "key2": "noValue" }
]
};
const result = data.theValues.filter(obj => obj.key1.indexOf('valueOne'));
console.log(result);
StepUp
2021-01-12
它不起作用,因为您正在将数组与字符串进行比较。这里,
key1
是一个数组,而
valueOne
是字符串。您可以将
Array.prototype.filter()
与
Array.prototype.some()
方法结合使用。过滤
key1
不包含
valueOne
的数组。
Some method returns true if at least one element in the array passes the test.
const data = {
theValues: [
{ key1: ['valueOne', 'valueTwo'], key2: 'otherValue' },
{ key1: ['valueThree', 'valueFour'], key2: 'noValue' },
],
};
const ret = data.theValues.filter((x) => !x.key1.some((y) => y === 'valueOne'));
console.log(ret);
mr hr
2021-01-12