gpt4 book ai didi

javascript - 根据匹配数据返回数组中的对象

转载 作者:行者123 更新时间:2023-11-29 19:11:40 24 4
gpt4 key购买 nike

我有一个包含大约 30 个对象的 json 数组。这是数组中的示例对象:

{
"id": 0,
"name": "Valle",
"activities": "night-life",
"food": "fancy-food",
"sport" : "baseball",
"geoProfile": "artsy",
"priority": 2
}

我正在根据用户输入在页面上构建另一个对象。用户将在单选按钮之间进行选择,在他们做出选择后,我将拥有一个对象,例如:

{geoProfile: "artsy", activities: "nature", food: "fancy-food", sport: "cricket"}

我正在使用 jQuery 的 $.each() 方法来遍历每个对象,如下所示:

$.each(self.data(), function (i, s) {
if (s.geoProfile == self.prefLocation() &&
s.activities == self.prefActivity() &&
s.food == self.prefFood() &&
s.sport == self.prefSport()) {
optionMatched = s;
return false;
}
});

这将返回一个包含所有四个匹配项的对象,但我如何返回与用户构建的对象匹配最多的 json 对象?如果两个匹配,我想查看“优先级”属性并返回优先级最低的那个。

最佳答案

你可以使用 Array#map并用匹配属性的总和构建一个新数组。

稍后你可以sort with map并使用结果进行排序并获得第一个元素。

var data = [/* your data here */],
search = { geoProfile: "artsy", activities: "nature", food: "fancy-food", sport: "cricket" },
result = data.map(function (a, i) {
return {
count: Object.keys(search).reduce(function (r, k) { return r + +(a[k] === search[k]); }, 0),
priority: a.priority,
index: i
}
});

result.sort(function (a, b) {
return b.count - a.count || a.priority - b.priority;
});

单循环解决方案

var data = [/* your data here */],
search = { geoProfile: "artsy", activities: "nature", food: "fancy-food", sport: "cricket" },
result = data.reduce(function (r, a, i) {
document.write('<pre>' + JSON.stringify(r, 0, 4) + '</pre><hr>');
var o = {
count: Object.keys(search).reduce(function (q, k) { return q + +(a[k] === search[k]); }, 0),
priority: a.priority,
index: i
};
if (!i || o.count > r[0].count || o.count === r[0].count && o.priority < r[0].priority) {
return [o];
}
o.count === r[0].count && o.priority === r[0].priority && r.push(o);
return r;
}, []);

关于javascript - 根据匹配数据返回数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405268/

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