关键是我不是JS的专家,所以请原谅我,如果我的代码是一个很大的错误,事实上我只是训练学习制作一个巨大的" Frankenstein&# 34;来自网络上的研究。
我想获取用户输入的两组值或列表,并比较它们寻找与js和jquery的匹配。
首先,我从两组输入(与类不同)中获取值与.map(),这样就可以创建数组的值。
var x = $(".row_a").map(function() {
return this.value;
}).get();
var y = $(".row_b").map(function() {
return this.value;
}).get();
然后我要创建一个分别包含两个arryas的变量(这时我认为自己有问题)如果我" hardcode"数组脚本的下一部分按预期工作,但如果我使用上面提到的前两个变量,脚本就会崩溃。
var arrays = [
[x],
[y]
];
在第三部分中(我真的不深入理解这部分代码)我运行脚本来比较第二个变量上的两个arrys,然后附加一个带有结果的段落。
var result = arrays.shift().reduce(function(res, v) {
if (res.indexOf(v) === -1 && arrays.every(function(a) {
return a.indexOf(v) !== -1;
})) res.push(v);
return res;
}, []);
$(".match").append("<div>Numbers " + result + " match in both lists</div>");
有人可以帮我解释什么是错的,或者给出一些可以提供帮助的线索或链接?
好奇:如果我在包含数组的变量中使用same variable twice,那么脚本会工作并找到四个匹配项(我认为这是比较相同的数组)-
编辑:
感谢@KarlReid和@Potorr。我不知道javascript中的交集概念,所以现在我知道一种更好的方法来实现结果。我会详细了解它,以便深入了解答案。
感谢@Alexandru让我知道了sintax错误,它将是非常基本和有用的。
最终结果:DEMO
(我将编辑该帖子的一小部分,以便在将来尝试使用相同的问题改进对其他人的搜索。)
答案 0 :(得分:1)
这是有效的,在线说明:
$(".action").click(function() {
var x = $(".row_a").map(function() {
return this.value;
}).get()
var y = $(".row_b").map(function() {
return this.value;
}).get()
// this is not really needed, if you want it:
// x, y are already arrays, so you don't need to wrap them with []
// var arrays = [
// x,
// y
//];
// intersection, adapted from: https://stackoverflow.com/questions/1885557/simplest-code-for-array-intersection-in-javascript
// if you use the "arrays" variable, then change x to arrays[0] and y to arrays[1]
//var intersection = x.filter(function(n) {
// return y.indexOf(n) !== -1;
//});
// the intersection function posted by @KarlReid is actually better and faster:
var intersection = x.filter(Set.prototype.has, new Set(y));
// create the result string
var result = intersection.join(',')
$(".match").append("<div>Numbers " + result + " match in both lists</div>");
});
编辑:将交集功能更改为@KarlReid
发布的功能答案 1 :(得分:1)
虽然存在更好的解决方案,正如Potorr的回答所指出的那样,发布的代码的唯一问题是:
var arrays = [
[x],
[y]
];
x
和y
已经是数组,因此您无需使用[ ]
包装它们。如果您只是将上面的代码替换为:
var arrays = [
x,
y
];