我想知道是否存在可以执行类似操作的功能
我已经尝试过zipWith和地图的一些变体,但是效果不佳。 唯一可行的解决方案是2x ForEach,但我想知道是否可以将其最小化为一个函数
_.map( (array1, array2), function(knownValue, indexOfArray1, indexOfArray2) );
我需要同时增加array1和array 2的索引(例如:a1:1,a2:1; a1:2,a2:2; ...)。
此数组还具有其他类型的值
@EDIT
我有点混乱。 我真正想要的是使此错误编写的代码正常工作
_.map( (array1, array2), (valueOfArray1, valueOfArray2), someFunction(knownValue, valueOfArray1, valueOfArray2) );
所以我的意图是: 对于array1和array2元素,执行函数“ someFunction”,并在下一个增量中使用每个数组的下一个元素。
赞:
_.map( (array1, array2), (array1[0], array2[0]), someFunction(knownValue, array1[0], array2[0]) );
然后下一个
_.map( (array1, array2), (array1[1], array2[1]), someFunction(knownValue, array1[1], array2[1]) );
但我希望它更加优雅:P
PS(对不起,这是一团糟)
答案 0 :(得分:2)
以下是flatMap
的示例:
const arr1 = [1,3,5];
const arr2 = [2,4,6];
console.log(arr1.flatMap((x,i) =>[x, arr2[i]]))
答案 1 :(得分:1)
由于您似乎已经在使用lodash(或类似的东西),所以.zip
应该可以工作。唯一的陷阱是.zip
在一个新数组中与每个原始数组中的一个产生“对”。
因此,当您映射.zip
的结果时,第一个参数是一个数组。请参阅下面的示例,请注意,我正在使用
function([a1_item, a2_item], indexForBoth) { .. rest of function here }
const a1 = ['a', 'b', 'c'];
const a2 = ['One', 'Two', 'Three'];
const result = _.zip(a1, a2).map(function([a1_item, a2_item], indexForBoth) {
return a1_item + a2_item + indexForBoth;
});
console.log("a1", a1);
console.log("a2", a2);
console.log("a1 zipped with a2", _.zip(a1, a2) );
console.log("Result after mapping and concatinating", result);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
答案 2 :(得分:0)
由于它们都具有相同数量的项目,因此您可以使用array1
遍历map
。 map
回调的第二个参数是索引。您可以使用array2
array2[index]
获取等效值
array1.map((value1, index) => someFunction(knownValue, value1, array2[index]))
这将为每个索引创建someFunction
返回的值数组
这是一些示例数据的摘要。在这里,someFunction
用_
分隔符将每个值连接起来
const someFunction = (...values) => values.join('_')
const array1 = [1, 2, 3],
array2 = [10, 20, 30],
knownValue = "fixed";
const output = array1.map((value1, i) => someFunction(knownValue, value1, array2[i]))
console.log(output)