簡體   English   中英

數組中的對象拼接未給出正確的結果

[英]Object Splicing within Array not giving correct result

在我的應用程序中,我想在匹配時從數組中拼接對象,我正在使用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);
    }
}
#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}]"

_.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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM