Javascript — Как я сравниваю два объекта массива?

#javascript #object

#javascript #объект

Вопрос:

У меня есть несколько объектов в массиве. Я хочу сравнить object[0].position с object[1].position и, если эти два значения были равны, object[0].position = 0 . как я могу это сделать?

`

 function carInfo(name) {
  this.name = name;
  this.position = 0;
}

let numOfCars =  prompt("Enter Number of Cars: ");
for (let i = 0; i < numOfCars; i  ) {
  carNames.push(new carInfo(prompt(`Enter Name of Car No.${i   1} : `)));
}

let str = "*";
str  = str.repeat(300);
console.log(str);

function shuffleArray(array) {
  for (let i = 0; i < array.length; i  ) {
    let temp = Math.floor(Math.random() * 10   1);
    array[i].position  = temp;
    if (array[i].position >= 300) {
      alert("game end! "   '"'   array[i].name   '"'   " win");
      break;
    }
    
  }
  return array;
}
 

`

Комментарии:

1. Могут ли более 2 объектов использовать одно и то же position значение и должны ли они все быть установлены position: 0 ? Происходит ли сравнение объектов только между 2 последовательно проиндексированными объектами? Я думаю, вам нужно уточнить свой вопрос.

2. [ссылка] ( codepen.io/msna218/pen/VwKQvZJ )

3. нет. мне нужно, если object[index].position === object[index 1].position в этом случае object[index].position = 0. нет, мне не нужно, чтобы все было установлено 0

Ответ №1:

по их положению. Я хочу сказать:

 If(object[i].position === object[i 1].position){
 object[i].position = 0;
}
 

Ответ №2:

Если все ваши объекты в массиве имеют атрибут ‘position’, вы можете отобразить массив и для каждого элемента проверить их положение. Для каждого объекта в массиве вы пытаетесь сравнить его со следующим объектом в массиве? Если это так, это может выглядеть примерно так:

 objectArr.map((object, index) => {
   if (object.position === objectArr[index   1].position){
       // The position's are equal, do something
   }
})
 

Если для каждого объекта в массиве вы хотите сравнить его со всеми другими объектами в массиве, вы можете сначала отсортировать массив на основе позиции объектов, чтобы сэкономить время.

Комментарии:

1. Я делаю это и выдаю ошибку » Uncaught TypeError: не удается прочитать свойство ‘position’ неопределенного»

2. функция shuffleArray(array) { for (пусть i = 0; i < array.length; i ) { пусть temp = Math.floor(Math.random() * 10 1); array[i].position = temp; если (array[i].position >= 300) { оповещение («конец игры! » ‘»‘ array[i].name ‘»‘ » win»); break; } array.map((object, index) => { if (object.position === object[index 1].position) { object.position = 0; } }); } возвращает массив; }

3. Тогда я предполагаю, что вы неправильно устанавливаете положение каждого объекта. Могу ли я увидеть код, в котором вы создаете массив и устанавливаете позиции?

4. Взгляните на изменения, которые я внес. Обратите внимание, что в конце файла я добавил start() для вызова функции start . codepen.io/gavischneider/pen/poEajbp?editors=1011

5. Нет проблем. Если мой ответ вам помог, пожалуйста, отметьте его как правильный, чтобы другие люди могли его увидеть.

Ответ №3:

Я делаю это со своим кодом

     objectArr.map((object, index) => {
   if (object.position === objectArr[index   1].position){
       // The position's are equal, do something
   }
})
 

но выдает ошибку

 Cannot read property 'position' of undefined
 

я делаю это

     function shuffleArray(array) {
  for (let i = 0; i < array.length; i  ) {
    let temp = Math.floor(Math.random() * 10   1);
    array[i].position  = temp;
    if (array[i].position >= 300) {
      alert("game end! "   '"'   array[i].name   '"'   " win");
      break;
    }
    array.map((object, index) => {
      if (object.position === object[index   1].position) {
        object.position = 0;
      }
    });
  }
  return array;
}