gpt4 book ai didi

javascript - 根据对象的 ID 属性过滤对象数组

转载 作者:行者123 更新时间:2023-12-03 08:55:47 24 4
gpt4 key购买 nike

使用 iTunes 的搜索 API 我希望根据特定条件从专辑中获取一组歌曲。在这个solution的帮助下,我成功地完成了一半的工作。 。唯一的问题是,有时专辑可能是干净的,也可能是露骨的,最终会输出重复的歌曲。

我认为这种情况下最好的解决方案是根据 collectionId 获取第一个可用(有时是唯一)歌曲集合。不幸的是,这个值不像我在 filter() 函数中传递的那样立即可知。

如何利用以下代码干净地选择一组:

$(function() {
iTunesSearch("Beauty Behind the Madness", "The Weeknd");

function iTunesSearch(album, artist, callback) {
var results;

$.getJSON("http://itunes.apple.com/search?term=" + album + "&entity=song&callback=?", function(data) {
results = data["results"];
console.log( filter(results, { collectionName: album, artistName: artist }) );
});
}

function filter(arr, criteria) {
return arr.filter(function(obj) {
return Object.keys(criteria).every(function(c) {
return obj[c] == criteria[c];
});
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

此过滤器函数执行您所要求的操作,即它获取第一个轨道集合

function filter(arr, criteria) {
var tracks = arr.filter(function(track) {
return Object.keys(criteria).every(function(c) {
return track[c] == criteria[c];
});
});
if (!tracks.length) {
return [];
}
return tracks.filter(function(track) {
return track.collectionId == tracks[0].collectionId;
});
}

编辑:

这是避免两次过滤器传递的优化,但这使得阅读变得有点困难:

function filter(arr, criteria) {
var firstCollectionId = null;
return arr.filter(function(track) {
var isMatch = Object.keys(criteria).every(function(c) {
return track[c] == criteria[c];
});
if (isMatch) {
if (firstCollectionId === null) {
firstCollectionId = track.collectionId;
return true;
}
return track.collectionId === firstCollectionId;
}
return false;
});
}

关于javascript - 根据对象的 ID 属性过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32506380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com