比较更改数组javascript

时间:2015-06-30 18:29:30

标签: javascript arrays

我一直试图解决这个问题,但我找不到解决方案。我有两个像这样的数组

var oldList = [
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-29","amount":"-61,00","desc":"item2"},
    {"date":"2015-06-29","amount":"-483,13","desc":"item2"},
    {"date":"2015-06-29","amount":"-57,00","desc":"item2"},
    {"date":"2015-06-28","amount":"-50,00","desc":"item1"}
]

var newList = [
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-29","amount":"-61,00","desc":"item2"},
    {"date":"2015-06-29","amount":"-483,13","desc":"item2"},
    {"date":"2015-06-29","amount":"-57,00","desc":"item2"},
    {"date":"2015-06-28","amount":"-50,00","desc":"item1"}
]

newList数组将一直更新,我需要将newList中的项添加到oldList中,正如您所看到的,有时会有多个项具有完全相同的数据,如newList中的{"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},,任何人都有对此有何想法?

修改 忘了提到

newList也会在一段时间后删除最旧的项目,但它们仍然应该在oldList中。

2 个答案:

答案 0 :(得分:1)

如果你想跟踪每个项目的年龄,那么给每个项目的id值等于收到它们的时间以来的秒数。

var newItem = {date="2015-06-30", amount: "-1 088,00", desc: "item1"};
var currentDate = new Date();
newItem.id = currentDate.getTime();

现在:newItem = {"id": 1435689401404, "date":"2015-06-30","amount":"-1 008,00","desc":"item1"}

这允许您遍历新数组并将具有最低id值的项(将是最旧的项)移动到旧数组。

答案 1 :(得分:0)

If I came to understand, you can try this. This function will add fields newList a oldList except repeated elements.

var oldList = [
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-29","amount":"-61,00","desc":"item2"},
    {"date":"2015-06-29","amount":"-483,13","desc":"item2"},
    {"date":"2015-06-29","amount":"-57,00","desc":"item2"},
    {"date":"2015-06-28","amount":"-50,00","desc":"item1"}
];

var newList = [
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-30","amount":"-1 008,00","desc":"item1"},
    {"date":"2015-06-29","amount":"-61,00","desc":"item2"},
    {"date":"2015-06-29","amount":"-483,13","desc":"item2"},
    {"date":"2015-06-29","amount":"-57,00","desc":"item2"},
    {"date":"2015-06-28","amount":"-50,00","desc":"item1"},
    {"date":"2015-06-28","amount":"-20,00","desc":"item1"},
    {"date":"2015-06-28","amount":"-20,00","desc":"item1"},
    {"date":"2015-06-28","amount":"-20,00","desc":"item1"},
    {"date":"2015-06-28","amount":"-20,00","desc":"item1"}
];
  
newList.forEach(function(item){
    var itemLine = [item.date, item.amount, item.desc];
    var exists = oldList.some(function(oldItem){
        var old = [oldItem.date, oldItem.amount, oldItem.desc];
        if(old.join() === itemLine.join()) return true;
        return false
    });
    !exists && oldList.push(item)
});

document.write("<pre>" + JSON.stringify(oldList, 0, 3) + "<pre>")