从对象数组中查找和删除对象
Find and remove object from array of objects
我有 2 个对象数组。
阵列 1:
[{ id: 2, ref: 1010101 },
{ id: 2, ref: 1010107 }]
数组 2:
[{ id: 2, ref: 10010001 },
{ id: 2, ref: 10010002 },
{ id: 2, ref: 10010003 },
{ id: 2, ref: 10010006 },
{ id: 2, ref: 10010007 },
{ id: 2, ref: 10010008 },
{ id: 2, ref: 10010009 },
{ id: 2, ref: 10020005 },
{ id: 2, ref: 1010101 }]
我需要做 2 个任务:
1. 查找数组 1 的哪些元素在数组 2 中。找到项目后,我将对该元素执行一些操作。
2. 删除从 array2 中找到的元素。对找到的项目执行某些操作后,我需要删除找到的每个项目。
我试图用 lodash 来做这件事,但没有成功。
我需要这样的东西:
if(elementFound) {
//do something
doSomething(item);
//after it, remove from array2
removeItemFromArray2(item);
}
谢谢,我认为有一种简单的方法可以用 lodash 做到这一点。
尝试在此上下文中使用Array.prototype.filter
来实现您想要的,
var filteredArray = Array2.filter(function(itm){
return Array1.filter(function(itmIn){
return itmIn.id === itm.id && itmIn.ref === itm.ref;
}).length == 0;
});
有一个特定的 lodash 函数:
var array1 = [
{ id: 2, ref: 1010101 },
{ id: 2, ref: 1010107 }
];
var array2 = [
{ id: 2, ref: 10010001 },
{ id: 2, ref: 10010002 },
{ id: 2, ref: 10010003 },
{ id: 2, ref: 10010006 },
{ id: 2, ref: 10010007 },
{ id: 2, ref: 10010008 },
{ id: 2, ref: 10010009 },
{ id: 2, ref: 10020005 },
{ id: 2, ref: 1010101 }
];
var res = _.differenceBy(array2, array1, 'ref');
document.write("<pre>" + JSON.stringify(res, null, 3) + "</pre>")
<script src="https://cdn.jsdelivr.net/lodash/4.6.1/lodash.min.js"></script>
当然有!可以使用 _.remove
以编程方式从array2
中删除满足特定谓词的元素。在您的情况下,该谓词将是"是array1
中的元素",
var array1 = [{ id: 2, ref: 1010101 },
{ id: 2, ref: 1010107 }]
var array2 = [{ id: 2, ref: 10010001 },
{ id: 2, ref: 10010002 },
{ id: 2, ref: 10010003 },
{ id: 2, ref: 10010006 },
{ id: 2, ref: 10010007 },
{ id: 2, ref: 10010008 },
{ id: 2, ref: 10010009 },
{ id: 2, ref: 10020005 },
{ id: 2, ref: 1010101 }]
_.remove(array2, function (item) {
return _.find(array1, item);
});
document.write("<pre>" + JSON.stringify(array2, null, 2) + "</pre>")
<script src="https://cdn.jsdelivr.net/lodash/4.6.1/lodash.min.js"></script>
具有
线性 O 的解。
var array1 = [{ id: 2, ref: 1010101 }, { id: 2, ref: 1010107 }],
array2 = [{ id: 2, ref: 10010001 }, { id: 2, ref: 10010002 }, { id: 2, ref: 10010003 }, { id: 2, ref: 10010006 }, { id: 2, ref: 10010007 }, { id: 2, ref: 10010008 }, { id: 2, ref: 10010009 }, { id: 2, ref: 10020005 }, { id: 2, ref: 1010101 }],
result = function (a, b) {
function k(x) { return x.id + '|' + x.ref; }
var o = {};
b.forEach(function (c) {
o[k(c)] = true;
});
a.forEach(function (c) {
o[k(c)] = false;
});
return b.filter(function (c) {
return o[k(c)];
});
}(array1, array2);
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
相关文章:
- 在不知道深度或父属性的情况下从对象中删除属性
- 解析JSON并从中删除对象会出错
- 如何从对象中删除属性
- 在特定条件下从存储在localStorage中的阵列中删除对象
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- AngularJS:删除重复的对象并按值对数组进行重新排序
- 正在从对象中删除值
- 正在从列表中删除对象
- 删除对象时终止setInterval
- jQuery-检测选择对象是否添加或删除了选项
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 为什么没有从数组中存在的对象中删除属性
- 从Three.js场景中删除许多对象的速度较慢
- 删除两个独立对象中的属性,而不使用多余的删除语句
- JS:将 EventListener 添加到动态创建的 DOM 对象中,这些对象删除 parentNode
- Java 脚本 json 解析对象:删除操作后不删除“,”
- JavaScript对象删除特定键值中的引号
- tinyMCE对象删除事件触发器
- javascript地图对象删除不工作
- Javascript对象删除元素