我有一个看起来像这样的对象:
var obj = {
"objectiveDetailId": 285,
"objectiveId": 29,
"number": 1,
"text": "x",
"subTopics": [{
"subTopicId": 1,
"number": 1
}, {
"subTopicId": 2,
"number": 32
}, {
"subTopicId": 3,
"number": 22
}]
}
var stToDelete = 2;
我在我的应用程序中安装了lodash
以用于其他事情。是否有一种有效的方法可以使用lodash
从{"subTopicId":2, "number":32}
对象中删除条目obj
?
或者有一种javascript方式可以做到吗?
答案 0 :(得分:220)
正如lyyons在评论中指出的那样,使用_.remove
更加惯用和执行这种方式,就像这样
_.remove(obj.subTopics, {
subTopicId: stToDelete
});
除此之外,你可以传递一个谓词函数,其结果将用于确定是否必须删除当前元素。
_.remove(obj.subTopics, function(currentObject) {
return currentObject.subTopicId === stToDelete;
});
或者,您可以通过使用_.filter
过滤旧数组来创建新数组,并将其分配给同一个对象,例如
obj.subTopics = _.filter(obj.subTopics, function(currentObject) {
return currentObject.subTopicId === stToDelete;
});
或者
obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToDelete});
答案 1 :(得分:25)
答案 2 :(得分:18)
答案 3 :(得分:15)
您现在可以使用_.reject,它可以根据您需要删除的内容进行过滤,而不是您需要保留的内容。
与仅适用于数组的_.pull
或_.remove
不同,._reject
正在处理任何Collection
obj.subTopics = _.reject(obj.subTopics, (o) => {
return o.number >= 32;
});
答案 4 :(得分:2)
除了@thefourtheye回答,使用谓词代替传统的匿名函数:
_.remove(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
OR
obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
答案 5 :(得分:1)
据我所知,有四种方法可以做到这一点
const array = [{id:1,name:'Jim'},{id:2,name:'Parker'}];
const toDelete = 1;
第一个:
_.reject(array, {id:toDelete})
第二个是:
_.remove(array, {id:toDelete})
这样,数组将发生突变。
第三个是:
_.differenceBy(array,[{id:toDelete}],'id')
// If you can get remove item
// _.differenceWith(array,[removeItem])
最后一个是:
_.filter(array,({id})=>id!==toDelete)
我正在学习lodash
回答记录,以便以后找到。
答案 6 :(得分:0)
破折号和打字稿
const clearSubTopics = _.filter(obj.subTopics, topic => (!_.isEqual(topic.subTopicId, 2)));
console.log(clearSubTopics);
答案 7 :(得分:0)
这是带有数组的简单lodash函数,并使用索引号将其删除。
index_tobe_delete = 1
fruit = [{a: "apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})
答案 8 :(得分:0)
您可以使用 removeItemFromArrayByPath 函数,其中包括一些 lodash 函数和拼接
/**
* Remove item from array by given path and index
*
* Note: this function mutates array.
*
* @param {Object|Array} data (object or array)
* @param {Array|String} The array path to remove given index
* @param {Number} index to be removed from given data by path
*
* @returns {undefined}
*/
const removeItemFromArrayByPath = (data, arrayPath, indexToRemove) => {
const array = _.get(data, arrayPath, []);
if (!_.isEmpty(array)) {
array.splice(indexToRemove, 1);
}
};
您可以在此处查看示例: https://codepen.io/fatihturgut/pen/NWbxLNv