我有一个涉及Object.assign()的难题

时间:2017-08-22 06:04:52

标签: javascript ecmascript-6 immutability ecmascript-7

以下是相关代码:

let schools = [
    { name: "Yorktown"},
    { name: "Stratford"},
    { name: "Washington & Lee"},
    { name: "Wakefield" }
];

const editName = (oldName, name, arr) => {
    return arr.map(item => {
        if (item.name === oldName) {
            return Object.assign({}, {newName: name});
        } else {
            return item
        }
    })
};

let updatedSchools = editName("Stratford", "HB Woodlawn", schools);
console.log(updatedSchools," --> updatedSchools");
console.log(schools," --> schools");

没什么特别的。但是,假设我想为Object.assign设置密钥,我传入的内容。这里,我选择的值是“newName”;当然,通常情况下,人们只会使用完全相同的密钥,甚至不必费心创建新密钥(也就是说,我只会说:

return Object.assign({}, {name})

但是,如果我想传递一些内容。这会带来一个有趣的(我猜这是有争议的)问题:关键是什么?它不是真正的字符串...所以它会如何工作?我试图解决这个问题有望解释我想说的话:

let schools = [
    { name: "Yorktown"},
    { name: "Stratford"},
    { name: "Washington & Lee"},
    { name: "Wakefield" }
];

const editName = (oldName, name, arr, newKey = name) => {
    return arr.map(item => {
        if (item.name === oldName) {
            return Object.assign({}, {newKey: name});
        } else {
            return item
        }
    })
};

let updatedSchools = editName("Stratford", "HB Woodlawn", schools, "bear");
console.log(updatedSchools," --> updatedSchools");
console.log(schools," --> schools");

正如你所看到的,我已经传入了“bear”作为我的newKey(如果没有给出键,则使用默认参数)。但是,这不起作用;而不是“熊”我只是得到字符串/标签newKey。我尝试使用模板字符串等解决这个问题,但我似乎无法为新密钥插入传入的值。我想这可能不可能......但也许某人有一些想法?也许与Json.stringify()或其他东西有关......?

几乎只是一个好奇的问题,但如果有人有一些想法,我会很感激反馈。感谢。

0 个答案:

没有答案