在我的应用程序中,我希望在匹配时从数组中拼接对象,我使用lodash函数进行拼接,如下所示,遗憾的是json没有正确拼接,
任何人都可以就此问题给我一些建议
var arr = [{
name: 'Jack',
id: 125
}, {
name: 'Jack',
id: 125
}];
var result = _.without(arr, _.findWhere(arr, {name: 'Jack'}));
console.log(JSON.stringify(result));
预期结果
[]
实际结果
[{"name":"Jack","id":125}]
更新1
即使使用普通的JavaScript方式也会提供相同的输出
for(var i = 0; i < arr.length; i++) {
var obj = arr[i];
if(obj.name === 'Jack') {
arr.splice(i, 1);
}
}
答案 0 :(得分:1)
#1
var arr = [{
name: 'Jack',
id: 125
}, {
name: 'Jack',
id: 125
}];
var result = _.rest(arr, function (el) {
return el.name === 'Jack';
});
console.log(JSON.stringify(result)); // "[]"
#2
var arr = [{
name: 'Jack',
id: 125
}, {
name: 'Jack',
id: 125
}, {
name: 'foo',
id: 124
}];
var result = _.rest(arr, function (e) {
return e.name === 'Jack';
});
console.log(JSON.stringify(result)); // "[{\"name\":\"foo\",\"id\":124}]"
// 3 also you can use _.filter if you do not want slice of array...
var result = _.filter(arr, function (e) {
return e.name !== 'Jack';
});
console.log(JSON.stringify(result)); // "[{\"name\":\"foo\",\"id\":124}]"
答案 1 :(得分:1)
_.findWhere只返回第一个匹配的元素。这样你就可以使用_.difference和_.filter或_.rest来完成任务
_.difference(arr, _.filter(arr,function(d){ return d.name = 'Jack' }));
您可以使用以下代码使用纯JavaScript实现相同的功能。
for(var i = 0; i < arr.length; i++) {
var obj = arr[i];
if(obj.name === 'Jack') {
arr.splice(i, 1);
i--; // Splicing of elements will cause shifting of indices in the array
}
}