比较两个javascript对象算法

时间:2014-07-28 14:28:19

标签: javascript

超级简单的例子,

var beforeList = [{"name": "A"},{"name": "B"},{"name": "C"}]

var updateList = [{"name": "A"},{"name": "B"},{"name": "D"}]

我必须比较这两个,如果缺少数据,我必须在List之前插入updatelist数据。

所以我想要的结果是,

function someLogicHere(beforeList, updateList){
// some logic here
  return afterList(i.e [{"name": "A"},{"name": "B"},{"name": "C"},{"name": "D"}]  in here) 
}

任何好的或令人敬畏的lib或插件都可以。

我自己用forEach制作,但确实很糟糕。

2 个答案:

答案 0 :(得分:1)

这应该有用。

var afterList = beforeList.slice(0); //Clones the array
var elementPresent;

for (var i = 0; i < updateList.length; i++) {
    elementPresent = false;

    for (var j = 0; j < updateList.length; j++) {
        if (updateList[i].name == afterList[j].name){
            elementPresent = true;
            break;
        }
    }

    if(!elementPresent){
        afterList.push({
            "name": updateList[i].name
        });
    }
}

答案 1 :(得分:0)

一种方式:

var afterList = beforeList.slice(0);

// store all values for easy lookup
var lookup = {};
for (var i in beforeList)
    lookup[beforeList[i].name] = true;

// look for values not in updateList & add to beforeList
for (var i in updateList)
{
   if (!lookup[updateList[i].name])
      afterList.push(updateList[i]);      
}