Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在包含数组元素的对象上使用.reduce将其转换为数组_Javascript_Arrays_Object_Reduce - Fatal编程技术网

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
现在是一个数组。这就是你得到错误的地方@瓦沙马