【发布时间】:2020-01-04 22:41:54
【问题描述】:
我查看了许多其他帖子,但无法解决我的问题。
我正在开发一个音乐/和弦播放程序,我想过滤掉所有包含一个或多个音符(我的程序中的数字)的和弦(又名对象),这些音符是失调的。
我有一个名为 chordLibrary 的数组,其中填充了对象(例如,{notesInChord: [5, 8], chordName: 'Major'})。我有另一个带有数字的数组(outOfKeyNotes = [11, 12];)。我想 .filter 并仅返回 chordLibrary 中不包括元素 notesInChord 中 outOfKeyNotes 中的数字的对象。
例如:
// THIS is the original array:
const chordLibrary = [
{ notesInChord: [5, 8], chordName: 'Major' },
{ notesInChord: [5, 8, 11], chordName: 'Dominant 7th' },
{ notesInChord: [4, 8, 12], chordName: 'Minor Major 7th' }
];
// THIS is what I hope to end up with after filtering for the array [11,12]:
let chordsInKey = [
{ notesInChord: [5, 8], chordName: 'Major' },
];
这是我目前无法运行的程序。它只是返回整个原始数组。
const chordLibrary = [
{ notesInChord: [5, 8], chordName: 'Major' },
{ notesInChord: [5, 8, 11], chordName: 'Dominant 7th' },
{ notesInChord: [4, 8, 12], chordName: 'Minor Major 7th' }
];
let outOfKeyNotes = [11, 12];
console.log(chordLibrary.length);
let chordsInKey = chordLibrary.filter(function(item) {
return !outOfKeyNotes.includes(item.notesInChord);
});
console.log(chordsInKey);
console.log(chordsInKey.length);
如果我更改程序以使chordLibrary 只是一个数值数组而不是对象数组,它就可以正常工作。它只是不适合我的需要。这是一个工作示例:
let chordLibrary = [1,2,3,11,12];
let outOfKeyNotes = [11, 12];
console.log(chordLibrary.length);
let chordsInKey = chordLibrary.filter(function(item) {
return !outOfKeyNotes.includes(item);
});
console.log(chordsInKey);
console.log(chordsInKey.length);
我错过了什么?谢谢
【问题讨论】:
标签: javascript arrays filter return