我有一个从数组中拼接数据的函数。
function findAndRemove(array, property, value) {
array.forEach(function(result, index) {
if(result[property] === value) {
//Remove from array
array.splice(index, 1);
}
});
}
使用相同的功能,我如何捕获从阵列拼接的数据。
让我们说var ar = [1, 2, 3, 4, 5];
如果我正在拼接1,2
,我将使用var ar = [3, 4, 5];
从这里我想要另一个数组与此输出
var ar1 = [1, 2];
修改
我需要对@Shivaji Varma建议的解决方案做出哪些更改,以便拼接数据不会从数组list
中删除,而只是复制到var removedItems = []
。
我尝试将其推回到阵列,但数据集没有变化。
我也试过合并这两个数组,但即使这样也无法工作。
答案 0 :(得分:1)
您可以将现有数组克隆为newarray
,如下面编辑的代码所示。这样,在调用函数时,初始数组list
保持不变。
var list = [
{ id : 10,Name : 'abc' },
{ id : 20,Name : 'xyz' },
{ id : 30,Name : 'mno' }
];
var removedItems = [];
function findAndRemove(array, property, value){
var newarray = [...array]
var index = newarray.map(function(x){ return x[property]; }).indexOf(value);
var removedItem = newarray.splice(index,1);
removedItems.push(removedItem);
}
findAndRemove(list, 'id', 20);
console.log(list);
console.log(removedItems);
答案 1 :(得分:0)
作为函数式编程和不变性的粉丝,我会这样做:
function findAndRemove(array, property, value) {
const removed = array.filter(item => item[property] === value);
const kept = array.filter(item => item[property] !== value);
return {"kept": kept, "removed": removed};
}
const arr = [{id: 1},{id: 2},{id: 3},{id: 4},{id: 5}]
console.log(findAndRemove(arr, 'id', 3).removed);

还可以将其放入单个.reduce
语句中。
答案 2 :(得分:0)
var list = [
{ id : 10,Name : 'abc' },
{ id : 20,Name : 'xyz' },
{ id : 30,Name : 'mno' }
];
var removedItems = [];
function findAndRemove(array, property, value){
var index = array.map(function(x){ return x[property]; }).indexOf(value);
var removedItem = array.splice(index,1);
removedItems.push(removedItem);
}
findAndRemove(list, 'id', 20);
console.log(list);
console.log(removedItems);