javascript - map函数不修改javascript中的当前数组并返回修改后的新数组

标签 javascript

map 是返回新数组还是修改 java 脚本中的现有数组? 我在这些示例 map 中有一个示例不应该修改当前数组(不工作)但它应该修改数组(它工作正常),

let x = [{ 'name': 'a', checked: false },
{ 'name': 'b', checked: true },
{ 'name': 'c', checked: false }];

根据y名称更改x

let y = [{ 'name': 'a', checked: true },
{ 'name': 'b', checked: true },]

map 功能

y.forEach(ele =>{
  boss= x.map(item =>{
    if(ele.name == item.name){
      item.checked = true;
    }
    return item;
  });
});

预期输出

x = [{"name":"a","checked":false},{"name":"b","checked":true},{"name":"c","checked":false}]

boss = [{"name":"a","checked":true},{"name":"b","checked":true},{"name":"c","checked":false}] 

example sackblitz

最佳答案

您可以通过获取一个空对象并使用 Map 分配实际对象和所需的更新属性来映射新对象。 .

var array = [{ name: 'a', checked: false }, { name: 'b', checked: true }, { name: 'c', checked: false }],
    update = [{ name: 'a', checked: true }, { name: 'b', checked: true }],
    updateMap = new Map(update.map(({ name, checked }) => [name, { checked }])),
    updatedArray = array.map(o => Object.assign({}, o, updateMap.get(o.name)));

console.log(updatedArray);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - map函数不修改javascript中的当前数组并返回修改后的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54666169/

相关文章:

php - Facebook 共享器弹出窗口

javascript - clearTimeout() 不停止 setTimeout

javascript - 如何使用 css 降低 <p> 内容区域的高度?

javascript - XMLHttpRequest 在 PHP 脚本运行时获取数据

javascript - 无法在表单验证 js 脚本上设置 null 的属性 'className'

php - 如何确保变量是从 PHP 中的特定 JavaScript 页面发布的

javascript - Quickblox 对话框 - 用户无法恢复

javascript - 停止由 $animate.addClass 启动的动画

javascript - Angular Controller - 他们为什么将其命名为 Controller ?

javascript - 无法访问传递给组件 React 的对象