我得到了一系列代表人的数据的对象。我需要过滤名称,当在它们的名字中添加所有字符的ASCII表示形式时,结果将是一个奇数。 例如:“ Aba”中字母的ASCII码总和为:65 + 98 + 97 = 260,这是一个偶数-过滤掉
我的逻辑如下:
我已经完成了上述4个任务,但我不知道如何连接来自不同阵列的项目。
例如:我有一个名称数组:let names = ['Aba', 'Abb']
和一个奇/偶数数组:let oddEven = [0, 1]
。
我该如何做:
1)名称[0]是奇数甚至是[0]
2)if oddEven [0]> 0 {过滤掉}吗?
谢谢
我的代码:
function findOddNames(list) {
let names = list.map((name) => name.firstName);
let splittedNames = names.map((name) => name.split(''));
let charCodes = splittedNames.map((arr) => arr.map((letter) => letter.charCodeAt(0)));
let charCodesTotal = charCodes.map((arr) => arr.reduce((a, b) => a + b, 0));
let oddEven = charCodesTotal.map((item) => item % 2);
};
findOddNames([
{ firstName: 'Aba', lastName: 'N.', country: 'Ghana', continent: 'Africa', age: 21, language: 'Python' },
{ firstName: 'Abb', lastName: 'O.', country: 'Israel', continent: 'Asia', age: 39, language: 'Java' }
])
答案 0 :(得分:1)
您可以像这样使用 filter
。 oddEven
具有模值。仅filter
个来自names
数组的索引,这些索引具有非零的oddEven
值。要获得偶数值,请使用oddEven[i] === 0
function findOddNames(list) {
let names = list.map((name) => name.firstName);
let splittedNames = names.map((name) => name.split(''));
let charCodes = splittedNames.map((arr) => arr.map((letter) => letter.charCodeAt(0)));
let charCodesTotal = charCodes.map((arr) => arr.reduce((a, b) => a + b, 0));
let oddEven = charCodesTotal.map((item) => item % 2);
let oddNames = names.filter((n, i) => oddEven[i] !== 0)
return oddNames;
};
const odd = findOddNames([
{ firstName: 'Aba', lastName: 'N.', country: 'Ghana', continent: 'Africa', age: 21, language: 'Python' },
{ firstName: 'Abb', lastName: 'O.', country: 'Israel', continent: 'Asia', age: 39, language: 'Java' }
])
console.log(odd)
答案 1 :(得分:0)
此替代方法使用函数filter
仅获得奇数名称,并使用函数reduce
对每个字母的ASCII码求和,最后使用运算符%
检查是否为和。偶数或奇数。
let findOddNames = (arr) => {
return arr.filter(({firstName}) => {
return firstName.split('').reduce((a, letter) => letter.charCodeAt(0) + a, 0) % 2;
});
};
let result = findOddNames([
{ firstName: 'Aba', lastName: 'N.', country: 'Ghana', continent: 'Africa', age: 21, language: 'Python' },
{ firstName: 'Abb', lastName: 'O.', country: 'Israel', continent: 'Asia', age: 39, language: 'Java' }
]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
为什么不使用.filter
而不创建单独的数组来保存输入数组的每个变体。
下面,我使用.filter
将输入数组过滤到findOddNames
数组中。如果要在使用过滤器时保留给定元素,则需要返回true
,如果不想保留它(即firstName
的和为偶数),则可以返回{{ 1}}。
在过滤器功能中,我还使用了destructuring assignment,这使我可以轻松地从输入数组中提取false
属性。我还使用了spread syntax。这是将字符串转换为字符数组的简便方法。最后,我在数组上使用了.reduce
以获取数组中所有字符的总和。
请参见以下示例:
firstName