我有一个像这样的对象数组:
var myArray = [
{field: 'id', operator: 'eq', value: id},
{field: 'cStatus', operator: 'eq', value: cStatus},
{field: 'money', operator: 'eq', value: money}
];
如何根据其属性删除特定的?
例如,我将如何删除以 'money' 作为字段属性的数组对象?
我有一个像这样的对象数组:
var myArray = [
{field: 'id', operator: 'eq', value: id},
{field: 'cStatus', operator: 'eq', value: cStatus},
{field: 'money', operator: 'eq', value: money}
];
如何根据其属性删除特定的?
例如,我将如何删除以 'money' 作为字段属性的数组对象?
一种可能:
myArray = myArray.filter(function( obj ) {
return obj.field !== 'money';
});
请注意,这filter
会创建一个新数组。尽管您myArray
使用新引用更新了原始变量,但引用原始数组的任何其他变量都不会获得过滤后的数据。谨慎使用。
遍历数组,并splice
删除您不想要的数组。为了更容易使用,向后迭代,这样您就不必考虑数组的实时性质:
for (var i = myArray.length - 1; i >= 0; --i) {
if (myArray[i].field == "money") {
myArray.splice(i,1);
}
}
假设您想通过它的 field 属性删除第二个对象。
使用 ES6 就这么简单。
myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1)
在 ES6 中,只有一行。
const arr = arr.filter(item => item.key !== "some value");
:)
可以使用 lodash 的findIndex获取特定元素的索引,然后拼接使用。
myArray.splice(_.findIndex(myArray, function(item) {
return item.value === 'money';
}), 1);
更新
你也可以使用 ES6 的findIndex()
findIndex() 方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
const itemToRemoveIndex = myArray.findIndex(function(item) {
return item.field === 'money';
});
// proceed to remove an item only if it exists.
if(itemToRemoveIndex !== -1){
myArray.splice(itemToRemoveIndex, 1);
}