我想为数组添加值。但是相同的值可能会更新。例如我的数组是
[{"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"}]
怎么可能?请帮帮我?
答案 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'))
检查该值是否已存在。
它可以使您免于额外的遍历,并且如果已存在则会覆盖值。