【问题标题】:Js array methods lost when iterating through an array of arrays?遍历数组数组时js数组方法丢失?
【发布时间】:2021-07-12 04:27:31
【问题描述】:

我有一个数组数组,当我用 foreach 遍历它们时,我尝试在项目上调用 flatmap,但是 js 说 flatmap 不是函数

var arrayItems = [];
arrayItems.push(["a", "b", "c", "d", "e"]);
arrayItems.push(["c", "d", "e", "f"]);
arrayItems.push(["c", "e", "f", "g", "h"]);
arrayItems.push(["e", "f", "g", "h"]);

var variations = generate_variations(arrayItems);

function generate_variations(arrayItems) {

  var variations = [];
  //https://*.com/questions/43241174/javascript-generating-all-combinations-of-elements-in-a-single-array-in-pairs/43241287

  arrayItems.forEach(([key, value]) =>
    variations.push(value.flatMap(
      (v, i) => value.slice(i + 1).map(w => [v, w])
    )));

  return variations;
}

console.log(variations);

这是一个来自Javascript - Generating all combinations of elements in a single array (in pairs)的简单平面图(我试图将它放在for循环中)

var array = ["apple", "banana", "lemon", "mango"];

var result = array.flatMap(
  (v, i) => array.slice(i + 1).map(w => [v, w])
);

console.log(result);

【问题讨论】:

  • arrayItems.forEach(([key, value]) => 这不是 forEach 传递给回调的内容。
  • key 是嵌套数组的第一个元素,value 是第二个元素。所以它们都是字符串,value 不是数组。
  • 您似乎将此与 Object.entries() 混淆了
  • 哦,哇,没听说过,现在试试 :) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 你认为你为什么需要它?你没有使用 key 做任何事情。

标签: javascript arrays methods


【解决方案1】:

改变这一行:

arrayItems.forEach(([key, value]) =>

收件人:

arrayItems.forEach((value) => 

var arrayItems = [];
arrayItems.push(["a", "b", "c", "d", "e"]);
arrayItems.push(["c", "d", "e", "f"]);
arrayItems.push(["c", "e", "f", "g", "h"]);
arrayItems.push(["e", "f", "g", "h"]);

var variations = generate_variations(arrayItems);


function generate_variations(arrayItems) {

  var variations = [];
  //https://*.com/questions/43241174/javascript-generating-all-combinations-of-elements-in-a-single-array-in-pairs/43241287

  arrayItems.forEach((value) => 
    variations.push( value.flatMap(
      (v, i) => value.slice(i + 1).map(w => [v, w])
    )));
    
  return variations;
}

console.log(variations);

【讨论】: