javascript更新或向数组添加值

时间:2017-04-20 06:05:58

标签: javascript html arrays node.js

我想为数组添加值。但是相同的值可能会更新。例如我的数组是

[{"abc1":"123456"},{"abc2":"123456"}]

何时再次添加是abc1。它可能会更新。例如,在正常情况下

[{"abc1":"123456"},{"abc2":"123456"},{"abc1":"123456"}]

但我想要

[{"abc2":"123456"},{"abc1":"123456"}]

我的代码

var categories = [],
arrIndex = {};

addOrReplace({"abc1":"125"});
addOrReplace({"abc2":"126"});
addOrReplace({"abc1":"127"});
addOrReplace({"abc3":"129"});


function addOrReplace(object) {
    var index = arrIndex[object[0]];
    console.log("index:"+object[0]);
    if(index === undefined) {
        index = categories.length;
    }
    arrIndex[object[1]] = index;
    categories[index] = object;
}

console.log(categories);

没有显示正确的答案。 它显示

[{"abc3":"129"}]

我想要

[{"abc2":"126"},{"abc1":"127"},{"abc3":"129"}]

怎么可能?请帮帮我?

4 个答案:

答案 0 :(得分:2)

如果找到索引,您可以使用Array#findIndex来确定类别中的对象,然后将新对象推送到categories



function addOrReplace(object) {
    var key = Object.keys(object)[0],
        index = categories.findIndex(o => key in o);

    if (index !== -1) {
        categories.splice(index, 1);
    }
    categories.push(object)
}

var categories = [];

addOrReplace({ abc1: "125"});
console.log(categories);
addOrReplace({ abc2: "126"});
console.log(categories);
addOrReplace({ abc1: "127"});
console.log(categories);
addOrReplace({ abc3: "129"});
console.log(categories);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

   var categories = new Map(); 

    addOrReplace({"abc1":"125"});
    addOrReplace({"abc2":"126"});
    addOrReplace({"abc1":"127"});
    addOrReplace({"abc3":"129"});


    function addOrReplace(object) {
       for (var name in object)
             categories[name] = object;
    }

    console.log(categories);

答案 2 :(得分:0)

var categories = [],
arrIndex = {};

addOrReplace({"abc1":"125"});
addOrReplace({"abc2":"126"});
addOrReplace({"abc1":"127"});
addOrReplace({"abc3":"129"});


function addOrReplace(object) {
    for(var c in categories){
        if(Object.keys(categories[c])[0] == Object.keys(object)[0]){
            categories.splice(c,1)
        }
    }
    categories.push(object)
}

console.log(categories);
//[{"abc2":"126"},{"abc1":"127"},{"abc3":"129"}]

答案 3 :(得分:0)

我不知道你最终会如何使用最终数据,但如果你正在寻找唯一性,我建议你去object hash而不是数组。

最初:

{
    "abc1" : "123456",
    "abc2" : "123456"
}

如果您现在添加{ "abc1" : "some_other_value" }

{
    "abc1" : "some_other_value",
    "abc2" : "123456"
}

您还可以使用if(objectHash('abc1'))检查该值是否已存在。

它可以使您免于额外的遍历,并且如果已存在则会覆盖值。