【发布时间】:2020-05-18 09:36:37
【问题描述】:
const words = [{ref : "a", list: "a & b & c & d", total: 0},
{ref : "a", list: "a & b & c & d", total: 0},
{ref : "b", list: "aa & bb & cc & dd", total: 0},
{ref : "c", list: "aaa & bbb & ccc & ddd", total: 0}];
var data = words.filter(item => {
if (item.ref == "a")
return item;
});
let result = data.map(o => {
o.list = o.list.split('&').map(key => ({
selected: false,
}))
return o;
});
console.log(words);
console.log(result);
- 我有单词数组
- 过滤
ref : a后,我得到了新数组data - 但是当我修改
data的对象时,它反映在主数组words上。 这不应该发生。
words
> Array [
Object { ref: "a", list: Array [Object { selected: false }, Object { selected: false }] },
Object { ref: "a", list: Array [Object { selected: false }, Object { selected: false }] },
Object { ref: "b", list: "aa & bb" },
Object { ref: "c", list: "aaa & bbb" }
]
result
> Array [
Object { ref: "a", list: Array [Object { selected: false }, Object { selected: false }] },
Object { ref: "a", list: Array [Object { selected: false }, Object { selected: false }] }
]
- 用字你可以看到
ref b和ref c没有被修改 - 但
ref a已更改。在我的情况下不应该发生这种情况
* 如何避免更改原始数组 words ? *
【问题讨论】:
-
map返回一个新数组。但是,在这里o.list = o.list.split()您正在修改数组中的对象。您可以将其更改为data.map(o => ({ ...o, list:o.list.split('&') }) )之类的内容。此外,您可以将过滤器简化为:words.filter(item => item.ref == "a")
标签: javascript