如何将新键添加到对象数组的多个索引?

时间:2017-02-20 06:03:24

标签: javascript arrays object

我有三个人一组。我想基于索引数组一次向多个对象添加一个新键。很明显,我尝试使用多个索引不起作用,但我似乎无法找到正确的方法。

var array = [
  {
    "name": "Tom",
  },
  {
    "name": "Dick",
  },
  {
    "name": "Harry",
  }
];

array[0,1].title = "Manager";
array[2].title = "Staff";
console.log(array);

返回此内容:

[
  {
    "name": "Tom",
  },
  {
    "name": "Dick",
    "title": "Manager"
  },
  {
    "name": "Harry",
    "title": "Staff"
  }
]

但我希望它能归还给你。

[
  {
    "name": "Tom",
    "title": "Manager"
  },
  {
    "name": "Dick",
    "title": "Manager"
  },
  {
    "name": "Harry",
    "title": "Staff"
  }
]

5 个答案:

答案 0 :(得分:0)

第一种方法::

array[0].title = "Manager";
array[1].title = "Manager";
array[2].title = "Staff";

数组[0,1]不起作用。

第二种方法::

for(var i=0;i<array.length;i++) { 
   var msg = "Manager"; 
   if(i===2) { 
      msg = "Staff" 
   } 
   array[i].title = msg 
 }

答案 1 :(得分:0)

使用数组中的任何分隔符都不能使用多个键。

错误:array[x, y] 正确:array[x]array[y]

在您的情况下,它将是array[0].title = array[1].title = "manager";

答案 2 :(得分:0)

试试这个:`

for (var i=0; var<= array.length; i++){

array[i].title = "manager";

}`

或者你可以改变它,因此var小于或等于索引中任何n个键范围。

编辑:改为使var&lt; = 1.重点是为要更改标题的索引范围制作循环。

答案 3 :(得分:0)

您可以使用像这样的辅助函数

function setMultiple(array, key, indexes, value) 
{
    for(i in array.length)
    {
        if(indexes.indexOf(i)>=0){
            array[i][key] = value;
        }
    }
}

然后

setMultiple(array, "title", [0,1], "Manager");

答案 4 :(得分:0)

假设你有一组更大的数组对象。

var array = [
  {
    "name": "Tom",
  },
  {
    "name": "Dick",
  },
  {
    "name": "Harry",
  },
  .
  .
  .
];

为要添加的新键创建一个对象,如下所示:

let newKeys = {
  'Manager': [0,2],
  'Staff': [1]
}

现在,您可以在此处添加更多此类标题以及所需的索引。

,你可以这样做:

function addCustomProperty(array, newKeys, newProp) {
  for (let key in newKeys) {       
    array.forEach((el, index) => {  
      if (key.indexOf(index) > -1) { // if the array corresponding to
        el[newProp] = key            // the key has the current array object 
      }                              // index, then add the key to the 
    })                               // object.
  }
  return array
}

let someVar = addCustomProperty(array, newKeys, 'title')