Попытка понять, почему расширенный цикл for не будет работать для добавления пар ключевых значений в объект

#javascript

Вопрос:

Пытаюсь понять, почему расширенный цикл for не добавит пары ключевых значений к объекту. Я знаю, что могу сделать это с помощью обычного цикла for, но почему расширенный цикл for не работает? Это синтаксическая ошибка?

   function transformArrayToObject(array) {
  // your code here
  var obj = {};
  
  // Loop through array of arrays adding the first and last as key value pairs
  for (var arrayOfArray in array) {
    obj[[arrayOfArray][0]] = arrayOfArray[1];
  }

  return obj;
}
var input = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];

var result = transformArrayToObject(input);
console.log(result); 
 

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

1. of Не используйте in . Вы тоже могли бы это сделать array.reduce((a, [k, v]) => {a[k] = v; return a}, {}) .

2. Неважно, я вижу, что вы не можете использовать для массива, еще раз спасибо за помощь.

3. Извините, ошиблась ссылкой. for…in . для…из

4. [arrayOfArray][0] === arrayOfArray , так как это 0-й элемент массива [arrayOfArray]

Ответ №1:

В строке 7 вы, возможно, хотели написать obj[array[arrayOfArray][0]] = array[arrayOfArray][1]; вместо этого.
for x in y даст вам индексы x из y.

Ответ №2:

В дополнение к тому, что это for of скорее цикл, чем for in цикл, в этой строке была ошибка:

 obj[arrayOfArray[0]] = arrayOfArray[1];
 

Вы создавали новый массив в качестве нового ключа с помощью obj[[arrayOfArray[0]]] = arrayOfArray[1];

 function transformArrayToObject(array) {
  // your code here
  var obj = {};

  // Loop through array of arrays adding the first and last as key value pairs
  for (var arrayOfArray of array) {
    obj[arrayOfArray[0]] = arrayOfArray[1];
  }

  return obj;
}
var input = [
  ['make', 'Ford'],
  ['model', 'Mustang'],
  ['year', 1964]
];

var result = transformArrayToObject(input);
console.log(result); 

Ответ №3:

Это то, чего вы пытаетесь достичь:

 function transformArrayToObject(array) {
    // your code here
    var obj = {};
    
    // Loop through array of arrays adding the first and last as key value pairs
    for (var arrayOfArray in array) {
      obj[array[arrayOfArray][0]] = array[arrayOfArray][1];
    }
  
    return obj;
  }
  var input = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
  
  var result = transformArrayToObject(input);
  console.log(result); 
 

in ключевое слово отличается в python и javascript. Javascript заставляет его предоставлять индекс. Вы можете сделать то же самое с of ним , и он выглядит немного чище:

 function transformArrayToObject(array) {
    // your code here
    var obj = {};
    
    // Loop through array of arrays adding the first and last as key value pairs
    for (var arrayOfArray of array) {
      obj[arrayOfArray[0]] = arrayOfArray[1]
    }
  
    return obj;
  }
  var input = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
  
  var result = transformArrayToObject(input);
  console.log(result);