Как добавить индекс во вложенный массив со значением 0 или 1 в зависимости от длины массива

1

Мне интересно, как сделать задачу следующим образом: у меня есть некоторый массив:

var x = [
            {
                "place": 1,
                "name": 'Steve',
            },
            {
                "place": 4,
                "name": 'Ann',
            },
            {
                "place": 9,
                "name": 'John',
            },
        ];

Теперь я хотел бы добавить новое значение, которое будет содержать номер индекса, чтобы получить результат как:

var x = [
            {
                'index':0,
                "place": 1,
                "name": 'Steve',
            },
            {
                'index':1,
                "place": 4,
                "name": 'Ann',
            },
            {
                'index':2,
                "place": 9,
                "name": 'John',
            },
        ];

Я пробовал это, но, похоже, это плохое решение и не работает:

for (var i = 0; i < x.length; i++) {
            arr.push(x['index'],i);
        }

Спасибо за помощь в этом, и я не хочу быть greddy, но если бы также было возможно помочь со следующим, это было бы дополнительно: возможно ли иметь значения "index" как 0 или 1, так что, если, например, У меня есть 5 элементов в массиве, есть ли способ сделать проверку в цикле с использованием modulo operaror и присвоить значение индекса как 0,1,0,1,0? С наилучшими пожеланиями.

var x = [
            {
                'index':0,
                "place": 1,
                "name": 'Steve',
            },
            {
                'index':1,
                "place": 4,
                "name": 'Ann',
            },
            {
                'index':0,
                "place": 9,
                "name": 'John',
            },
            {
                'index':1,
                "place": 9,
                "name": 'John',
            },
            {
                'index':0,
                "place": 9,
                "name": 'John',
            },
        ];
  • 0
    Вы можете отобразить массив и назначить индекс: x = x.map((item, index) => Object.assign(item, { index: index % 2 })); jsfiddle.net/k3ghxzeu/1
  • 0
    Вам нужно значение по модулю для отображения? если это так, вы можете использовать CSS с nth-child или nth-of-type .
Показать ещё 1 комментарий
Теги:
object
arrays

5 ответов

3
Лучший ответ

Вы можете использовать .forEach() и оператор модуля следующим образом:

var x = [
  {"place": 1, "name": 'Steve'},
  {"place": 4, "name": 'Ann'},
  {"place": 9, "name": 'John'}
];

x.forEach((o, i) => (o.index = i % 2));

console.log(x);
2

Вам нужно только указать новый атрибут для каждого объекта в массиве:

for (var i = 0; i < x.length; i++) {
        x['index']=i;    
}

Если вы хотите чередовать 0 и 1 в качестве значений индекса, вы должны использовать оператор mod и проверить, равно ли значение 0:

for (var i = 0; i < x.length; i++) {
        x['index']=(i % 2 == 0);    
}
2

Вы можете просто пройти через массив и добавить значение index для каждого объекта. Они могут быть последовательными или чередующимися, как показано ниже:

var x = [ { "place": 1, "name": 'Steve' },
          { "place": 4, "name": 'Ann' },
          { "place": 9, "name": 'John' }
        ];
        
for (let i = 0; i < x.length; i++) {
    x[i].index = i;
}
    
console.log(x);
    
for (let i = 0; i < x.length; i++) {
    x[i].index = i % 2;
}
    
console.log(x);
  • 1
    Спасибо лучшему сообществу в мире. У меня так много решений ....
0

ты мог бы сказать:

x.forEach(function(val, index) {
    //depending on the index you need
    val.index = index // or = index % 2 
})

И x будет иметь дополнительный index ключа со значениями, которые вам нужны. Дайте мне знать, если это не поможет.

0

прежде всего, вы массивы объектов, поэтому вам нужно запустить над массивом и добавить каждому объекту новое свойство "index".

x.forEach(function(obj, index){
   obj['Index'] = index;
})

теперь, если вы хотите 0-1-0-1...

id do smth like htis:

var count = 0;

    x.forEach(function(obj){
      if(count==0){
        obj['Index'] = --count;
      }else{
       obj['Index'] = ++count;
      }
    })

Ещё вопросы

Сообщество Overcoder
Наверх
Меню