在包含数组元素的对象上使用 .reduce 将其转换为数组
Using .reduce on an object containing array elements to convert it to array
我正在尝试将包含数组作为其 属性 的对象转换为包含这些嵌套数组中所有元素的数组。
这是我正在尝试做的事情:
data1 = [{
a: 1,
b: ["uz", "vy"]
}, {
a: 2,
b: ["wxa", "xwy"]
}, {
a: 6,
b: ["ysa", "zaa"]
}]
data1.reduce(function(q, w) {
return q.b.concat(w.b)
})
我希望最终数据如下所示:
data1 = ["uz","vy","wxa","xwy","ysa","zaa"]
然而,这给出了一条错误消息:
"Uncaught TypeError: Cannot read property 'concat' of undefined"
如果q.b
指的是object里面的数组,为什么没有concat
属性?
我在这里做错了什么?
您收到错误消息,因为 q
是一个数组,而不是具有 b
属性 的对象。而且你没有加上初始值。
您可以 concat
和 map
let data1 = [{a: 1,b: ["uz", "vy"]}, {a: 2,b: ["wxa", "xwy"]}, {a: 6,b: ["ysa", "zaa"]}];
let result = [].concat(...data1.map(o => o.b));
console.log(result);
如果你想使用reduce
,你可以:
let data1 = [{a: 1,b: ["uz", "vy"]}, {a: 2,b: ["wxa", "xwy"]}, {a: 6,b: ["ysa", "zaa"]}];
let result = data1.reduce(function(q, w) {
return q.concat(w.b);
}, []); //<-- Add [] to initiate the initial value
console.log(result);
将初始值传递给 reduce
函数。此外,q.b
在第一次调用中将不是有效值。你想连接到 q
而不是:
data1 = [{
a: 1,
b: ["uz", "vy"]
}, {
a: 2,
b: ["wxa", "xwy"]
}, {
a: 6,
b: ["ysa", "zaa"]
}]
var result = data1.reduce(function(q, w) {
return q.concat(w.b);
}, [])
console.log(result);
我正在尝试将包含数组作为其 属性 的对象转换为包含这些嵌套数组中所有元素的数组。
这是我正在尝试做的事情:
data1 = [{
a: 1,
b: ["uz", "vy"]
}, {
a: 2,
b: ["wxa", "xwy"]
}, {
a: 6,
b: ["ysa", "zaa"]
}]
data1.reduce(function(q, w) {
return q.b.concat(w.b)
})
我希望最终数据如下所示:
data1 = ["uz","vy","wxa","xwy","ysa","zaa"]
然而,这给出了一条错误消息:
"Uncaught TypeError: Cannot read property 'concat' of undefined"
如果q.b
指的是object里面的数组,为什么没有concat
属性?
我在这里做错了什么?
您收到错误消息,因为 q
是一个数组,而不是具有 b
属性 的对象。而且你没有加上初始值。
您可以 concat
和 map
let data1 = [{a: 1,b: ["uz", "vy"]}, {a: 2,b: ["wxa", "xwy"]}, {a: 6,b: ["ysa", "zaa"]}];
let result = [].concat(...data1.map(o => o.b));
console.log(result);
如果你想使用reduce
,你可以:
let data1 = [{a: 1,b: ["uz", "vy"]}, {a: 2,b: ["wxa", "xwy"]}, {a: 6,b: ["ysa", "zaa"]}];
let result = data1.reduce(function(q, w) {
return q.concat(w.b);
}, []); //<-- Add [] to initiate the initial value
console.log(result);
将初始值传递给 reduce
函数。此外,q.b
在第一次调用中将不是有效值。你想连接到 q
而不是:
data1 = [{
a: 1,
b: ["uz", "vy"]
}, {
a: 2,
b: ["wxa", "xwy"]
}, {
a: 6,
b: ["ysa", "zaa"]
}]
var result = data1.reduce(function(q, w) {
return q.concat(w.b);
}, [])
console.log(result);