【问题标题】:iterate over nested arrays and provide access to each index遍历嵌套数组并提供对每个索引的访问
【发布时间】:2016-03-22 21:43:02
【问题描述】:

我正在学习关于 Javascript 数组的课程,我们必须了解下划线JS方法的底层内容。我需要为 _.each 方法编写一个函数,它允许我遍历单个数组并返回一个修改后的嵌套数组,其中包含每个值的索引。 例如:

var myArray = ['a', 'b', 'c'];

在 myArray 上调用 each 方法后,新数组应如下所示:

myArray = [ [ 'a', 0 ], [ 'b', 1 ], [ 'c', 2 ] ];

我在 google 上搜索了一天,但没有找到任何特定于此任务的内容。卡住了,需要一些帮助!谢谢。

【问题讨论】:

  • each 无法解决这个问题。请改用map
  • 她正在学习eachmap 更好,但这是下一个。

标签: javascript arrays indexing


【解决方案1】:

_.each 遍历您的数组并具有以下签名

function(value, index, array)

那么让我们看看它是如何做到的......

var result = [];
_.each(myArray, function(value, index, array){
  result.push([value, index]); // <= does the work
}

这不是理想的方式(您应该使用map),但确实说明了每种方式的工作原理。

祝你好运

【讨论】:

  • 这不是您使用的纯 JavaScript,而是您甚至没有提及的 lodash 或下划线。我更喜欢使用纯 JavaScript 解决方案的其他答案,尽管他们应该提到这些并非在每个浏览器中都可用。
  • 要清楚。这解释了如何按照要求使用each 方法进行操作。不理想,但问题的答案。否决票……真的吗?
  • 从问题来看,很明显正在使用 lodash/underscore!
  • 你是对的,对此感到抱歉。我把它改成了赞成票
  • 感谢您的洞察力。是的,我意识到这不是最好的方法,但我的程序希望我们了解下划线代码的底层内容。
【解决方案2】:

您可以使用Array.prototype.reduce() 函数进行如下操作,

var myArray = ['a', 'b', 'c'];
var result = myArray.reduce(function(a,b,i){ 
 return (a.push([b,i]), a)
},[]);
console.log(result); // [['a',0],['b',1],['c',2]];

或者正如@bergi 所说,您也可以使用Array.prototype.map() 来做到这一点,

var myArray = ['a', 'b', 'c'];
var result = myArray.map(function(itm,i){ 
 return [itm,i];
});
console.log(result); // [['a',0],['b',1],['c',2]];

【讨论】:

  • 这假设 aileen 知道 .reduce 的作用.. 这比 foreach 更先进。
  • 也许可以解释或链接到 mozilla 文档中的这些功能?虽然我完全赞同这个答案,但很多 JavaScript 程序员并不熟悉函数式编程范式
  • @froginvasion 抱歉,现在是印度凌晨 3 点。我只是睡在我的键盘上。我添加了官方文档的链接。 :)
  • 凌晨 1 点之后没有什么好事发生;)。呵呵,谢谢补充:)
【解决方案3】:

只需使用Array#map():

map() 方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数。

var myArray = ['a', 'b', 'c'],
    result = myArray.map(function (a, i) {
        return [a, i];
    });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

【讨论】:

    【解决方案4】:

    如果你正在学习_.each方法,你可以这样做

    var myArray = ['a', 'b', 'c'];
    
    _.each(myArray, function (e, i) {
        myArray[i] = [e, i];
    });
    
    document.write(JSON.stringify(myArray));
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"&gt;&lt;/script&gt;

    但是对于您的情况,最好使用_.map 函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2022-01-14
      • 2018-05-20
      • 2018-09-04
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多