从原始数组中删除/插入所有项目的最佳方法是什么 - Javascript?

时间:2016-06-21 07:50:44

标签: javascript arrays

我有originalArray列表编号(当app不变时)。 做了一些事情后,我有了modifiedArray,其中一些项目是从originalArray插入/删除的。 我编写了函数来查找从originalArray删除/插入的所有项目。

var modifiedArray = [1,3,5,6,7,8,9,10,11];
var originalArray = [1,2,3,4,5,6];
var insertedArray = [];
var deletedArray = [];
function work(){
        for(var i = 0 ; i< originalArray.length ; i++){
            if(modifiedArray.indexOf(originalArray[i]) == -1){
                deletedArray.push(originalArray[i]);
        }
    }

    for(var i = 0 ; i< modifiedArray.length ; i++){
            if(originalArray.indexOf(modifiedArray[i]) == -1){
                insertedArray.push(modifiedArray[i]);
        }
    }
}

这是从原始数组中删除/插入所有项目的最佳方法吗?

如果有人有其他建议,请随时告诉我们。

非常感谢你。

3 个答案:

答案 0 :(得分:0)

您可以使用哈希表并将其用作已删除项目的余数。

var modifiedArray = [1, 3, 5, 6, 7, 8, 9, 10, 11],
    originalArray = [1, 2, 3, 4, 5, 6],
    insertedArray = [],
    deletedArray = [],
    hash = Object.create(null);

originalArray.forEach(function (a) {
    hash[a] = {value:a};
});

insertedArray = modifiedArray.filter(function (a) {
    var r = !hash[a];
    if (hash[a]) {
        delete hash[a];
    }
    return r;
});

deletedArray = Object.keys(hash).map(function (k) { return hash[k].value; });

console.log(insertedArray);
console.log(deletedArray);

答案 1 :(得分:0)

抱歉,这是一个非常有成本的解决方案(感谢评论的zerkms)

您的算法贯穿两个阵列。我认为只有通过原始数组才能达到你想要的效果:

对于原始数组中的每个项目:

  • 如果是修改后的数组&gt;从两个数组中删除它
  • 如果它不是修改后的数组&gt;什么都不做

完成后,修改后的数组将只包含原始数组中不存在的项(插入),原始数组将只包含未在修改后的数组中的项(已删除)。

答案 2 :(得分:0)

&#13;
&#13;
var modifiedArray = [1,3,5,6,7,8,9,10,11];
var originalArray = [1,2,3,4,5,6];

function difference(a,b){
	return a.filter(function(x) { return b.indexOf(x) < 0 })
}

var insertedArray = difference(modifiedArray, originalArray);
var deletedArray = difference(originalArray, modifiedArray);

alert("Inserted: " + JSON.stringify(insertedArray));
alert("Deleted: " + JSON.stringify(deletedArray));
&#13;
&#13;
&#13;

您也可以使用lodash library。它具有许多与数组/对象一起操作的功能。

var modifiedArray = [1,3,5,6,7,8,9,10,11];
var originalArray = [1,2,3,4,5,6];
var insertedArray = _.difference(modifiedArray, originalArray);
var deletedArray = _.difference(originalArray, modifiedArray);