2017-02-20 2 views
0

У меня есть группа из трех человек. Я хочу добавить новый ключ к нескольким объектам сразу на основе массива индексов. Очевидно, что моя попытка использовать несколько индексов не работает, но я не могу найти правильный подход.Как добавить новый ключ к нескольким индексам массива объектов?

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" 
    } 
] 

ответ

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 
} 
0

Вы не можете использовать несколько ключей с помощью любого разделителя в массивах.

Неправильно: array[x, y] Правильно: array[x] и array[y]

В вашем случае, это будет array[0].title = array[1].title = "manager";

0

Попробуйте это: `

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

array[i].title = "manager"; 

}` 

Или вы можете изменить его вокруг так вар меньше или равна любого п диапазона ключей в индексе.

EDIT: вместо этого сделать var < = 1. Цель состоит в том, чтобы создавать циклы для диапазона индексов, в которые вы хотите изменить заголовок.

+0

У вас есть много синтаксических ошибок там. Неверный блок состояния в цикле 'for'. Вы повторяете цикл за дополнительное время. И, наконец, вы устанавливаете свойства 'title' всех объектов массива' array' в '' manager''. –

+0

уточнил, что я имел в виду с итерациями. И как это неверно? –

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"); 
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') 
Смежные вопросы