изменение свойств объекта, переданного в функцию, и возвращение того же объекта.сведение массива объектов к одному объекту, абстрактно - PullRequest
0 голосов
/ 22 июня 2019

инструкции:

// Assigns own enumerable properties of source object(s) to the //destination
// object. Subsequent sources overwrite property assignments of //previous sources.
// extend({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
// should return ->  { 'user': 'fred', 'age': 40 }

Я могу достичь аналогичного результата, построив новый объект внутри функции, передав и переназначая значение, если ключ уже существует, но инструкции должны расширять первый переданный объект, а не создавать новый объект и его содержимое. Я не понимаю, как передать остальные объекты в виде пар ключ / значение в первый объект, предоставленный в качестве аргумента

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

Я пытался и не смог выяснить, как переназначить свойства первого аргумента, только смог построить новый объект и вернуть его, а это не то, о чем просила проблема с домашней работой.

Вот мой начальный код:

function extend(...destination) {
    const result = {};
    for(let i in destination){
      let obj = destination[i];
      for(let key in obj){
        result[key] = obj[key];
      }
    }
    destination[0] = result;
    return destination[0];
  }

с уменьшением ()

вот я пытаюсь сделать это с помощью метода .reduce ()

function extend(...destination) {
  return destination.reduce((acc,val) => {
    //accumulator is first object in destination
    //does val exist as a key on accumulator
    //if true, replace existing key
    //if false, add as new key with val
    return acc[val] ? acc[val] = [val] : acc[val] = [val];
  }, destination[0]);
}  

var first = {x:1};
console.log(extend(first, {a:2}, {b:3}));//->first = {x:1, a:2, b:3};

returns {b:3} instead

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

Сначала заполняет переменную.

var first = {x:1};
extend(first, {a:2}, {b:3});
expect(first).to.eql({x:1, a:2, b:3});

переназначает значение клавиши 'a' с 'b' на 'x'

var to = {a:'x'};
var from = {a:'b'};
extend(to, from)
expect(to.a).to.equal('b');

должен передать ключ / значение от 'до' к '

var to = {};
var from = {a:'b'};
extend(to, from);
expect(to.a).to.equal('b');
...