微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用reduce和lambda将每个单词放入js数组中

如何解决如何使用reduce和lambda将每个单词放入js数组中

输出应如下所示:[[],[],[4 个字母词],[5 个字母词],[6 个字母词],... [20 个字母词]。我创建了一个包含 21 个空子数组的数组,并尝试从名为 wordArray 的不同数组中推入单词。

let acc = []
let i = 0
while ( i < 21){ // creating array with 21 empty subarrays
    acc.push([])
    i++
}

let reducer = function(acc,key) {
    return acc = wordArray.reduce(function(acc,word) {
    (acc[word[key]] = acc[word[key]] || [] ).push(word)
    //acc.push(word)
    return acc
    },[])
};
console.log(reducer(acc,'length'));

我的代码根据字长将单词推入数组,但它还需要根据 word.length 添加空子数组,从零开始并通过 acc 数组的第 21 个槽。例如,没有存储长度小于 4 个字母的单词,因此数组应该包含 4 个空数组 [] 以及长度为 21 的单词的空数组。

解决方法

我认为通过消除 reduce 的混淆会更容易处理,如果您只是迭代单词并推送/分配到 acc 中的索引,代码会更清晰一个循环:

const wordArray = ['foobar'];

let acc = []
let i = 0
while (i < 21) {
  acc.push([])
  i++
}

let reducer = function(acc,key) {
  for (const word of wordArray) {
    (acc[word[key]] = acc[word[key]] || []).push(word)
  }
  return acc;
};
console.log(reducer(acc,'length'));

如果您真的想使用 reduce,请确保传入您构造的 acc 作为累加器的初始值(现在您正在传入 [] 的初始累加器{1}},不是多维数组)

const wordArray = ['foobar'];

let acc = []
let i = 0
while (i < 21) { // creating array with 21 empty subarrays
  acc.push([])
  i++
}

let reducer = function(acc,key) {
  return acc = wordArray.reduce(function(acc,word) {
    (acc[word[key]] = acc[word[key]] || []).push(word)
    //acc.push(word)
    return acc
  },acc)
};
console.log(reducer(acc,'length'));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。