我需要向数组中添加一个新项目或者通过id更改项目,但是当我调用方法push时,它只是创建一个带有键0,1,2的新项目......
我写了这个数组
var finalArray = [];
button.addEventListener('click', function(){
id=123;
writeArray(id, "Jason");
//When I click the button, array always create a new item instead of change the item by id (123).
});
function writeArray(id, name){
var array = {
[id]:{
name: name
}
};
finalArray.push(array);
}
结果,数组总是创建一个新项目,如下所示。但我需要通过id更改项目。
0:{
123: {
name: "Chinga"
}
}
1:{
123: {
name: "Chinga"
}
}
2:{
123: {
name: "Chinga"
}
}
.
.
.
答案 0 :(得分:1)
每次调用writeArray
方法时,您当前都会在数组中推送一个对象,这不是目标。
由于您想编辑一个对象,几乎将它用作地图,您应该直接访问所需的密钥(id)并设置所需的值。
finalArray[id] = name;
答案 1 :(得分:0)
当我调用方法push时,它只是用键创建一个新项 0,1,2 ...
push
将始终添加新项目,您需要先检查该项目是否已存在。
function writeArray(id, name){
var index = finalArray.findIndex( function(item, index){
return Object.keys( item )[0] == id;
});
//existing logic
var array = {
[id]:{
name: name
}
};
if ( index == -1 )
{
finalArray.push(array);
}
else
{
finalArray[index] = array;
}
}
答案 2 :(得分:0)
你想要的不是一个数组,而是一个对象。
// Initialize object.
var finalObject = {}; /* Changed [] to {} */
function writeToObject(id, name){
finalObject[id] = name;
};
如果您仍想使用数组,只需编写finalArray[id] = name
,但如果您将123作为数字(读取:索引),那么将自动创建直到索引123的空格。
答案 3 :(得分:0)
我认为您可以在这里使用两种方法:
而不是array
,您只需使用object
即可简化代码:
finalObject = {};
finalObject[id] = name;
// Structure
finalObject = {'123': 'Jason', '1234': 'John'}
但是,如果必须使用实际的array
,解决方案是迭代数组并检查具有给定ID的对象是否已经存在,如果是,则修改其他情况的name属性只需将一个新对象推送到数组。
// Structure
finalArray = [{id: '123', 'Jason'}, {id: '1234', 'John'}]
根据您的使用情况,两者都可能是有效的解决方案。