用Javascript从另外两个数组构建一个新数组



我有两个数组:

alphabet由字母(例如英语字母表)组成。dictionary是具有单词和定义的对象列表,'word'是单词值的关键字。

我想构建一个名为frequency的新数组,它将包含以字母表数组中每个字母开头的单词数,索引与字母表数组相对应。

我设法想出了以下办法:

alphabet.forEach(function(letter) {
frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
});

这为我获取了frequency的各个值。在Javascript中,构建这些值的数组的最佳语法是什么?这是另一个过滤器吗?或者代码应该手动使用当前的forEach和增量索引吗?

首先,让我们获取一些示例数据。我们将忽略任何与问题无关的内容。

const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
var dictionary = [{'word': 'alpha'}, {'word': 'beta'}, {'word': 'balloon'}]

然后,我们将创建一个results变量,它将按字母顺序保存所有结果的数组。

var results = []

现在,我们以与您以前相同的方式循环,但我们将把每个结果push添加到我们的列表中。

alphabet.forEach(function(letter) {
frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
results.push(frequency);
});

作为一种让我们更容易查看结果的替代解决方案,我们将把结果作为一个对象,并使用字母作为键。

var results = {};
alphabet.forEach(function(letter) {
frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
results[letter] = frequency;
});

使用reduce,您可以轻松地创建一个以字母为键、以匹配数组为值的新对象。

const words = ["abba", "ant", "apple", "bannana", "barn", "car", "cat"];
const alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
const result = alphabet.reduce((a, letter) => {
a[letter] = words.filter(word => word.toLowerCase().startsWith(letter));
return a;
}, {});
console.log(result);

最新更新