方法Array.push()javascript

时间:2018-01-16 14:49:27

标签: javascript arrays

我需要向数组中添加一个新项目或者通过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"
    }
}
.
.
.

4 个答案:

答案 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'}]

根据您的使用情况,两者都可能是有效的解决方案。