2014-11-05 82 views
1

在我的申請我想從在匹配的數組拼接對象,我使用lodash剪接功能等,如下所示,不幸的是,JSON是不正確地拼接,對象拼接不給正確的結果

Working Demo

任何人都可以給我一些建議針對此問題

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
#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

_.find只返回第一個匹配元素。所以,你可以使用_.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 
    } 
}