捕获从数组拼接的数据

时间:2018-05-16 12:13:29

标签: javascript arrays

我有一个从数组中拼接数据的函数。

    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 = []

我尝试将其推回到阵列,但数据集没有变化。

我也试过合并这两个数组,但即使这样也无法工作。

3 个答案:

答案 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);