Javascript Foreach-inside-array.map()
我正在尝试将值映射到新数组。问题是我映射的属性可以是数字或数组 对于数组,我有一个问题,因为我的结果是一个关联数组。我的目标是将Javascript Foreach-inside-array.map(),javascript,jquery,Javascript,Jquery,我正在尝试将值映射到新数组。问题是我映射的属性可以是数字或数组 对于数组,我有一个问题,因为我的结果是一个关联数组。我的目标是将[[1,2,3],[1,2,3](见下文)转换为[1,2,3,1,2,3]。换言之;把它做成一个一维数组 我尝试在map()中使用foreach循环,但没有成功。有什么想法吗 var list = [{ foo: 1, bar: [1,2,3] }, { foo: 2, bar: [1,2,3] }]; var retArr = list.map(function (
[[1,2,3],[1,2,3]
(见下文)转换为[1,2,3,1,2,3]
。换言之;把它做成一个一维数组
我尝试在map()中使用foreach循环,但没有成功。有什么想法吗
var list = [{ foo: 1, bar: [1,2,3] }, { foo: 2, bar: [1,2,3] }];
var retArr = list.map(function (v) {
return v.bar;
});
console.log(retArr); // [[1,2,3], [1,2,3]]
如果使用,将自动获得阵列展平: 该函数可以返回[…]个值数组,这些值将被展平为完整数组
在第二个示例中,由于没有从回调返回值,因此得到了
[undefined,undefined]
。$的返回值。每个回调对.map
回调的返回值没有影响
而.map
在这里对您没有帮助,因为您只能从回调返回一个值。相反,您可以在数组上迭代:
var retArr = [];
list.forEach(function (v) {
if ($.isArray(v.bar)) {
retArray.push.apply(retArray, v.bar);
}
else {
retArray.push(v.bar);
}
});
或者,您可以使用。但是,由于您使用的是jQuery,因此使用其映射功能是最简单的解决方案。如果您使用,您将自动获得阵列展平:
该函数可以返回[…]个值数组,这些值将被展平为完整数组
在第二个示例中,由于没有从回调返回值,因此得到了[undefined,undefined]
。$的返回值。每个回调对.map
回调的返回值没有影响
而.map
在这里对您没有帮助,因为您只能从回调返回一个值。相反,您可以在数组上迭代:
var retArr = [];
list.forEach(function (v) {
if ($.isArray(v.bar)) {
retArray.push.apply(retArray, v.bar);
}
else {
retArray.push(v.bar);
}
});
或者,您可以使用。但由于您使用的是jQuery,使用其映射功能是最简单的解决方案。没有jQuery,您也可以使用数组进行展平。reduce
:
var list = [{ foo: 1, bar: [1,2,3] }, { foo: 2, bar: [1,2,3] }]
,retArr = list.reduce(function (a,b) {
return a.concat(b.bar);
},[]
);
//=> retArr = [1,2,3,1,2,3]
在没有JQuery的情况下,您也可以使用数组展平。reduce
:
var list = [{ foo: 1, bar: [1,2,3] }, { foo: 2, bar: [1,2,3] }]
,retArr = list.reduce(function (a,b) {
return a.concat(b.bar);
},[]
);
//=> retArr = [1,2,3,1,2,3]
不能单独使用map
,因为那样只会返回数组或数字数组。但是,您可以使用以下方法将其展平为一个阵列:
如果您使用,您甚至可以将其缩短为
var retArr = _.flatten(_.pluck(list, "bar"), true);
不能单独使用map
,因为那样只会返回数组或数字数组。但是,您可以使用以下方法将其展平为一个阵列:
如果您使用,您甚至可以将其缩短为
var retArr = _.flatten(_.pluck(list, "bar"), true);
我不知道这叫“扁平化”。如果我找到了,我可能会找到它:-)谢谢,我不知道它叫“扁平化”。如果我这样做了,我可能会找到它:-)谢谢在您的第一个示例中,map的返回值从未使用过,因此您应该用forEach替换map,forEach的作用相同,但不返回任何内容。您还可以删除“return v;”。在第二个示例中,将全局变量retArr设置为[],然后调用map。如果可能的话,应该避免使用全局变量。@SpiderPig:你说得有一部分是对的。将答案更改为使用数组。reduce
,这为OP提供了一个一行。在您的第一个示例中,map的返回值从未使用过,因此您应该将map替换为forEach,forEach执行相同的操作,但不返回任何内容。您还可以删除“return v;”。在第二个示例中,将全局变量retArr设置为[],然后调用map。如果可能的话,应该避免使用全局变量。@SpiderPig:你说得有一部分是对的。将答案更改为使用Array.reduce
,这为OP提供了一个单行程序。