Javascript 在包含数组元素的对象上使用.reduce将其转换为数组
我试图将包含数组作为其属性的对象转换为包含这些嵌套数组中所有元素的数组 以下是我正在尝试做的:Javascript 在包含数组元素的对象上使用.reduce将其转换为数组,javascript,arrays,object,reduce,Javascript,Arrays,Object,Reduce,我试图将包含数组作为其属性的对象转换为包含这些嵌套数组中所有元素的数组 以下是我正在尝试做的: data1=[{ 答:1,, b:[“uz”,“vy”] }, { 答:2,, b:[“wxa”,“xwy”] }, { a:6, b:[“伊萨”、“扎阿”] }] 数据1.reduce(函数(q,w){ 返回q.b.concat(w.b) })您收到一个错误,因为q是一个数组,而不是具有b属性的对象。您没有添加初始值 您可以concat和map let data1=[{a:1,b:[“uz”,“
data1=[{
答:1,,
b:[“uz”,“vy”]
}, {
答:2,,
b:[“wxa”,“xwy”]
}, {
a:6,
b:[“伊萨”、“扎阿”]
}]
数据1.reduce(函数(q,w){
返回q.b.concat(w.b)
})
您收到一个错误,因为q
是一个数组,而不是具有b
属性的对象。您没有添加初始值
您可以concat
和map
let data1=[{a:1,b:[“uz”,“vy”]},{a:2,b:[“wxa”,“xwy”]},{a:6,b:[“ysa”,“zaa”]};
让result=[].concat(…data1.map(o=>o.b));
控制台日志(结果)代码>将初始值传递给reduce
功能。而且,q.b
在第一次调用中将不是有效值。您想改为使用q
:
data1=[{
答:1,,
b:[“uz”,“vy”]
}, {
答:2,,
b:[“wxa”,“xwy”]
}, {
a:6,
b:[“伊萨”、“扎阿”]
}]
var结果=数据1.reduce(函数(q,w){
返回q.concat(w.b);
}, [])
控制台日志(结果)
reduce
需要一个聚合器,在这里,您应该使用一个空数组([]
)为reduce
-[]
提供一个初始值。也应该是q.concat
。您可以使用console.log([].concat(…data.map({b}=>b))
但是如果我这样做:data1.reduce(函数(q,w){console.log(q)})。我得到一个对象作为输出。这难道不意味着“q”最初是作为对象传递的吗?@VSharma这是因为您没有初始化初始值,它应该是一个数组。如果不这样做,则第一个元素将是初始值。您需要将初始值作为数组放置,因为您期望的输出是数组。如果我不传入初始值,则第一个元素“q”将是对象。因此,“q.b”将是一个数组。“concat”不应该是这个数组上的一个方法吗?是的,它将只在第一个循环上concat
返回一个数组,因此在第二个循环中,q
现在是一个数组。这就是你得到错误的地方@瓦沙马