当我这样做时:
csvParse(txtString, {columns: true})
我得到一个对象数组,在其中我想为每个对象更新某个属性。
但所有发生的事情都是对象变得不确定。
这完全符合我的预期:
let x = [{
y: 123,
z: 'abc'
}, {
y: 456,
z: 'efg'
}, {
y: 789,
z: 'hij'
}];
console.log(x);
x.map(x => {
x.z.toUpperCase();
});
console.log(x); // no changes saved
x.map(x => {
x.z = x.z.toUpperCase();
});
console.log(x); //now z is uppercase
然而,当我在我的代码中执行相同操作时:
resolve(
csvParse(txtString, {
columns: true
})
.map(x => {
x.categories = x.categories
.replace(regexes.doubleQuotesOrSquareBrackets, '')
.split(',');
})
);
结果数组中的每个元素都是未定义的。
答案 0 :(得分:5)
ES6函数的工作方式是,当存在单个语句时返回计算值,如果有多个语句则需要显式使用return
在您的情况下,您的单个语句是一个赋值操作。
因此技术上返回undefined
.map(x => {
x.categories = ...
});
只是
.map(x => {
x.categories = ...
return undefined;
});
要解决此问题,您可以
.map(x => {
x.categories = ...;
return x.categories;
});
或
.map(x => {
...;
return x;
});