Сжатие массивов 3/5

По аналогии с предыдущим заданием, ток проще (тож мож потом переделаю, когда меня вдохновение озарит).

1 вариант - for
const getZippedArrays = function(keysArray, valuesArray) {
  let obj = {};
  for (let i = 0; i < keysArray.length; i++) {
    obj[keysArray[i]] = valuesArray[i];
  }  
  return obj;
}
2 вариант - forEach
function getZippedArrays(keysArray, valuesArray) {
  let obj = {};
  keysArray.forEach( (prop, i) => obj[prop] = valuesArray[i] );
  return obj;
}
3 вариант - reduce
const getZippedArrays = (keys, values) =>
  keys.reduce(
    (acc, cur, i) => {
      acc[cur] = values[i];
      return acc;
    }, {});
5 лайков

const getZippedArrays = (keysArray, valueArray) => {
let obj = {};
for (let i = 0; i < keysArray.length; i++)
obj[keysArray[i]] = valueArray[i];
return obj;
}

Спасибо! надо 2 и 3 вариант загуглить!

Объясните почему система проверки не принимает решение.
Единственное отличие, которое есть в сравнении с уже опубликованными решениями это отличие в условии циклы - не <, а <=.
Результат как можно увидеть на скриншоте полностью соответствует “ожидаемому результату”.
Спасибо за ответ.

var getZippedArrays = function (keyArr, valueArr) {
  var obj = {};
  for (var i = 0; i < keyArr.length; i++) {
    obj[keyArr[i]] = valueArr[i];
  }
  return obj;

}

ну начнем с того, что ваш цикл неверный. разберу на примере второго теста (т.к. не имею доступа к курсам, но мне достаточно лога из вашего скрина).
keyArr.length это длина массива с ключами. она равна 4.
вы в цикле перебираете от 0 до 4 включительно. т.е. 5 раз.
уже ошибка, т.к. вам надо перебирать до последнего члена массива, а не до длины. т.е. в условии нужно было указать i < keyArr.length или i <= keyArr.length - 1

из-за этой ошибки у вас формируется пара ключ-значение undefined: undefined
в тесты эта пара не попадает, т.к. там используется парсер из json, соответственно вы не видите этой пары, т.к. она не вещественна (если вы не знаете json, даже не осмысливайте).
но по факту в вашем объекте 5 пар ключ-значение, вместо 4. и соответственно оно как-то там внутри сравнивает (ну я то понимаю как, просто объяснение этого выходит за рамки данного курса) и эти два объекта не идентичны. поэтому оно ругается и не проходит ни один тест.

2 лайка

Выходит так, что я не могу отследить своб же ошибку, т.к как вы сами и написали необходимы знания выходящие за рамки курса.
Надеюсь такое атата будет исправлено, на поиск проблемы ушло много времени, что привело к подсказкам с форума.
Благодарю за ответ.

почему не можете? вам никто не запрещает посчитать каждую итерацию в уме =) просто делайте отладку циклов с выводом поитерационно в консоль, чтобы было понятнее.
атата исправлено не будет, объяснять почему - я не буду, т.к. вам придется сначала освоить json, чего в курсах не преподают.

1 лайк

В операторе for в команде i <= keyArr.length нужно добавить минус 1.
Будет: for (var i = 0; i <= keyArr.length - 1; i++)

var getZippedArrays = function (keys, value) {
  var result = {};
  
  var branch = 0;
  
  for (var i = 0; i < keys.length; i++) {
    
    result[keys[i]] = value[branch];
    
    branch++;
  }
  
  return result;
}

branch - лишняя переменная

Да согласен.
Потом уже сообразил, что вместо branch нужно i

const getZippedArrays = (keys, values) => {
    let map = new Map()
    for (var i = 0; i <= keys.length - 1; i++){
        map.set(keys[i], values[i])
      }
  return Object.fromEntries(map)
}

const getZippedArrays = (keys,values)=>Object.assign( ...keys.map((el, index) => ({ [el]: values[index] })) );

const getZippedArrays = (keys,values)=>Object.fromEntries(keys.map((el, index) => [[el], values[index]]));

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

array = [];

let getData = function (keysArray, dataArray) {

for (let i=0; i<keysArray.length; i++) {
     let object = {};      
 
       for (let j=0; j<keysArray.length; j++) {
          if (keysArray[j] && dataArray[i][j]) {
              object[keysArray[j]] = dataArray[i][j]           
          } 
       }
      
array.push(object) } 

return array
}

Моё решение:

let getZippedArrays = function (arrayName, arrayValue) {
  let obj = {
  };
  console.log(arrayName, arrayValue)
  for(let i = 0; i <= arrayName.length - 1; i++) {
    let iWord = arrayName[i];
    obj[iWord] = arrayValue[i];
  }
  return obj;
}

Так вот

let getZippedArrays = (arrKey, arrVal) => Object.fromEntries(arrKey.map((_, i) => [arrKey[i], arrVal[i]]))

let newobj = {};
let names = [];
let keys = [];

function getZippedArrays(names, keys) {

for(let i = 0; i < names.length && i < keys.length; i++) {
let name = names[i];
let key = keys[i];
newobj[name] = key;
}
return newobj;
}

let names = [];

let meanings = [];

let getZippedArrays = function (names, meanings) {
let object = {};
  for (i = 0; i < names.length; i++) {
    object[names[i]] = meanings[i];
  }
  return object
};

getZippedArrays (names, meanings);
let getZippedArrays = function (key, value) {
  let obj = {}; // создаем пустой объект
  
  for (let i = 0; i < key.length; i++) { 
    obj[key[i]] = value[i]; //добавляем в объект текущий ключ и значение
  };
     
return obj;  
};
1 лайк