如何将一个数组与多个数组匹配,并返回最接近的数组
How to match an array with multiple arrays and return the closest array
我正在尝试制作一个饮料web应用程序,用户输入成分,然后返回饮料或鸡尾酒的名称。
我的drinks数组是这样的:
// Drinks
var drinks = new Array(
[0,['Whisky on the Rocks'],['whisky','ice']],
[1,['Vodka on the Rocks'],['vodka','ice']]
);
我有这个标题,但它只返回第一个元素:
function compare(myDrink) {
var difference = [];
difference[0] = [];
difference[0][0] = [];
var dCount = drinks.length;
for (x = 0;x < dCount; x++) {
jQuery.grep(drinks[x][2], function(el) {
if (jQuery.inArray(el, myDrink) == -1){
difference[x][0].push(el);
difference[x][1] = difference[x][0].length;
}
});
var theDrink = difference[x][0].join(',');
if (theDrink == ''){
return drinks[x][1];
} else {
var diff = 'The Difference is: ' + difference[x][1] + ' Missing: ' + theDrink;
return diff;
}
}
}
我做错了什么?还有更好的方法吗?
提前感谢,
罗伯特好的,我会这样做:在你的for
循环中,记录你找到的最小距离和它的索引:
....
var closest = -1;
var minDifference = 99;
for (x = 0;x < dCount; x++) {
difference[x] = [];
difference[x][0] = [];
difference[x][1] = 0;
jQuery.grep(drinks[x][2], function(el) {
if (jQuery.inArray(el, myDrink) == -1){
difference[x][0].push(el);
difference[x][1] = difference[x][0].length;
}
});
if (difference[x][1] < minDifference) {
minDifference = difference[x][1];
closest = x;
}
}
...
查看这个完整的示例。顺便说一下,我强烈建议使用一个更有意义的结构为drinks
和difference
数组,如建议的VisioN,也许也使函数返回某种数据结构(最接近的饮料索引和成分数组,例如),而不是一个描述字符串。
相关文章:
- 获取最接近的数组数
- JavaScript:如何在最接近值的关联数组中查找键
- 在 javascript 数组中搜索最接近的下一个值
- 按键查找数组中最接近的 2 个元素
- 检测数组中接近且具有相同索引值的数字
- Javascript/jquery- 如何在数组中获取最接近的时间
- 从数组中获取最接近的数字匹配项,必须更低
- 如何使用 lodash 从数组中获取最接近目标的前两个数字
- javascript/查找数组中最接近的值
- 我的算法中查找数组最大元素的缺陷在哪里
- 在Javascript中查找最接近所需值的数组条目
- 查找最接近给定时间数组的时间
- Javascript在数组中找到最接近的数字,而不需要重复
- 从数组中获取最接近的数字
- Javascript在数组中找到最接近的数字
- 最接近数组的价格
- 如何从数组中获得最接近的值
- 我如何在数组中找到最接近的数字,而不用遍历
- 获取数组(JS)组合的最接近的值
- 改变这种字符串数组最优雅的方法是什么