在对象中按 属性 而非值删除订单项
remove line items by property, not values, in an object
我有一个这样的对象:
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
我希望 obj
现在代表这个:
var obj = [
{
item1: 'test',
item2: 'something',
},
{
item1: 'test',
item2: 'something',
},
{
item1: 'test',
item2: 'something',
}
]
我找到了很多关于对象操作和使用键等的答案
JavaScript: filter() for Objects
这些答案的问题是
它是一种特定的对象格式,它们没有涵盖如何处理多个对象
它完全删除对象,而不是值和 keys/line 项
我最接近的是这个:
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = [];
obj.forEach(function(el){
newObj.push(el.item1);
newObj.push(el.item2);
})
console.log(newObj)
显然这还不够,因为我需要推送整个对象,而不仅仅是键值。
我正在尝试这样的事情 但这个答案不起作用,因为它是按值而不是按键进行的(?)
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var acceptedProps = ['item1', 'item2'];
var newObj = Object.keys(obj).reduce(function(r, e) {
if (acceptedProps.includes(obj[e])) r[e] = obj[e]
return r;
}, {})
console.log(newObj)
它只是给我一个空数组。我也试过翻转一些东西
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var acceptedProps = ['item1', 'item2'];
var newObj = Object.keys(obj).reduce(function(r, e) {
if (acceptedProps.includes(obj[r])) r[e] = obj[r]
return r;
}, {})
console.log(newObj)
请问r
和 e
在此函数中的含义是什么?
对于包含多个对象的数组,如何按 属性 而不是值过滤对象?
编辑 - 好的,我刚找到这个答案:
Remove array element based on object property
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = obj.filter(function( obj ) {
return obj.field !== 'item3';
});
console.log(newObj)
所以现在...我必须以某种方式将其更改为 lop(?) 并更新每个没有行项目的对象...
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = obj.forEach(function(el) {
el.filter(function( el ) {
return el.field !== 'item3';
});
})
console.log(newObj)
但我得到:
el.filter is not a function
...
我该怎么做?我做错了什么?
您可以使用 Array.map()
遍历数组项以创建新数组,Object.entries()
过滤掉作为数组项的对象的值,并使用 Object.fromEntries()
从过滤后的条目构建对象。
var obj = [{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
];
var newObj = obj.map(item => Object.fromEntries(
Object.entries(item)
.filter(([key, value]) => value !== 'REMOVE THIS')
));
console.log(newObj);
你可以尝试类似的东西
obj.map((item) => {
return {
item1: item.item1,
item2: item.item2,
}
});
我有一个这样的对象:
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
我希望 obj
现在代表这个:
var obj = [
{
item1: 'test',
item2: 'something',
},
{
item1: 'test',
item2: 'something',
},
{
item1: 'test',
item2: 'something',
}
]
我找到了很多关于对象操作和使用键等的答案
JavaScript: filter() for Objects
这些答案的问题是
它是一种特定的对象格式,它们没有涵盖如何处理多个对象
它完全删除对象,而不是值和 keys/line 项
我最接近的是这个:
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = [];
obj.forEach(function(el){
newObj.push(el.item1);
newObj.push(el.item2);
})
console.log(newObj)
显然这还不够,因为我需要推送整个对象,而不仅仅是键值。
我正在尝试这样的事情
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var acceptedProps = ['item1', 'item2'];
var newObj = Object.keys(obj).reduce(function(r, e) {
if (acceptedProps.includes(obj[e])) r[e] = obj[e]
return r;
}, {})
console.log(newObj)
它只是给我一个空数组。我也试过翻转一些东西
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var acceptedProps = ['item1', 'item2'];
var newObj = Object.keys(obj).reduce(function(r, e) {
if (acceptedProps.includes(obj[r])) r[e] = obj[r]
return r;
}, {})
console.log(newObj)
请问r
和 e
在此函数中的含义是什么?
对于包含多个对象的数组,如何按 属性 而不是值过滤对象?
编辑 - 好的,我刚找到这个答案:
Remove array element based on object property
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = obj.filter(function( obj ) {
return obj.field !== 'item3';
});
console.log(newObj)
所以现在...我必须以某种方式将其更改为 lop(?) 并更新每个没有行项目的对象...
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var obj = [
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
]
var newObj = obj.forEach(function(el) {
el.filter(function( el ) {
return el.field !== 'item3';
});
})
console.log(newObj)
但我得到:
el.filter is not a function
...
我该怎么做?我做错了什么?
您可以使用 Array.map()
遍历数组项以创建新数组,Object.entries()
过滤掉作为数组项的对象的值,并使用 Object.fromEntries()
从过滤后的条目构建对象。
var obj = [{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
},
{
item1: 'test',
item2: 'something',
item3: 'REMOVE THIS',
item4: 'REMOVE THIS',
item5: 'REMOVE THIS',
}
];
var newObj = obj.map(item => Object.fromEntries(
Object.entries(item)
.filter(([key, value]) => value !== 'REMOVE THIS')
));
console.log(newObj);
你可以尝试类似的东西
obj.map((item) => {
return {
item1: item.item1,
item2: item.item2,
}
});