3

我想知道是否存在任何可以做类似事情的功能

我已经尝试过 zipWith 和地图的一些变体,但没有好的结果。唯一可行的解​​决方案是 2x ForEach,但我想知道是否可以将其最小化为一个函数

_.map( (array1, array2), function(knownValue, indexOfArray1, indexOfArray2) );

我需要的是同时增加 array1 和 array 2 索引(比如:a1: 1, a2: 1; a1: 2, a2: 2; ...)。

这个数组还有其他类型的值

@编辑

我有点搞砸了。我真正想要的是让这个错误编写的代码工作

_.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(对不起这个烂摊子)

4

3 回答 3

2

这是一个例子flatMap

const arr1 = [1,3,5];
const arr2 = [2,4,6];

console.log(arr1.flatMap((x,i) =>[x, arr2[i]]))

于 2019-06-25T11:26:08.577 回答
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>

于 2019-06-25T11:56:36.263 回答
0

由于它们都具有相同数量的项目,因此您可以循环array1使用map. callback的第二个参数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)

于 2019-06-25T12:54:51.630 回答