javascript - Javascript 中 reduce 方法的奇怪行为

标签 javascript arrays

谁能给我解释一下这种情况?

第二次调用该函数,结果为{cat: 2, cat,cat: 1, dog: 1, frog: 1}

但是,我认为结果会是 {cat: 4, dog: 1, frog: 1}

这是怎么回事?

var animals = ['cat', 'cat', ['cat'], 'dog', 'frog'];

var otherAnimals = ['cat', 'cat', ['cat', 'cat'], 'dog', 'frog'];

function reducingArrays(arraySource) {
  var countedData = arraySource.reduce(function(allItems, item) {
    if (item in allItems) {
      allItems[item]++;
    } else {
      allItems[item] = 1;
    }
    return allItems;
  }, {});

  console.log(countedData);
}

reducingArrays(animals); // {cat: 3, dog: 1, frog: 1}

reducingArrays(otherAnimals); // {cat: 2, cat,cat: 1, dog: 1, frog: 1}
// What I expected: {cat: 4, dog: 1, frog: 1}

最佳答案

您可以将单个元素转换为数组:

var animals = ['cat', 'cat', ['cat'], 'dog', 'frog'];

var otherAnimals = ['cat', 'cat', ['cat', 'cat'], 'dog', 'frog'];

function reducingArrays(arraySource) {
  var countedData = arraySource.reduce(function(allItems, item) {
    var arr = Array.isArray(item) ? item : [item];
    allItems[arr[0]] = (allItems[arr[0]] || 0) + arr.length;
    return allItems;
  }, {});

  console.log(countedData);
}

reducingArrays(animals);

reducingArrays(otherAnimals); 

关于javascript - Javascript 中 reduce 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444511/

相关文章:

javascript - 如何解决DataTables表头列宽和表体列宽有时不匹配的问题?

ios - 在 Parse 中获取特定行

Javascript 函数数组删除项目

javascript - 如何从自定义 javascript 访问 redux 存储

javascript - Nodejs : Unexpected token * when using robe

需要 C 代码的 C# 等效项

c# - 计算列表的每个元素出现在多少个连续的子列表中

javascript - 我如何访问函数外的数组元素

javascript - 将数据从文本区域传递到单选按钮的值

javascript - 如果滚动超过 300vh