инструкции:
// 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');