包含对象逻辑失败的Javascript数组。出了什么问题?

时间:2011-06-07 19:43:46

标签: javascript jquery arrays contains underscore.js

我有两个数组,其中一个数组包含另一个数组的所有唯一值。第二个数组保存另一个数组的重复值的唯一值。

下面的代码循环遍历第一个数组,并检查该数组索引中的值是否与被欺骗项的第二个数组索引中的值匹配。如果是这样,它将在项目的文本之前添加一个箭头。

这似乎没有正常工作,它正在打印第一个数组,而不是检查被欺骗的项目。

var aos = ["a","a","b","c","d","e","f","f","f","g","g","g","h","h","h"];

// Credits to the guy who helped me with this, internet w00t!
var duplicates = _.select(aos, function(val) {
    var True = _.after(2, function() {
        return true;
    });
    return _.any(aos, function(elem) {
        return elem === val ? True() : false;    
    });
});

aos.sort();
aos = _.unique(aos);

var dennis =  _.unique(duplicates);
    if ($.inArray(aos[i], dennis)) {
        console.log("CONTAINS!", dennis, aos[i]);
        $("tr[number='" + i + "']").find("td:first-child").prepend("<img src='images/arrow.jpg' style='padding-right: 5px;'/>");
    } else
        console.log("no!");

输出:

no!
CONTAINS! ["a", "f", "g", "h"] b
CONTAINS! ["a", "f", "g", "h"] c
CONTAINS! ["a", "f", "g", "h"] d
CONTAINS! ["a", "f", "g", "h"] e
CONTAINS! ["a", "f", "g", "h"] f
CONTAINS! ["a", "f", "g", "h"] g
CONTAINS! ["a", "f", "g", "h"] h

输出应该是什么:

CONTAINS!
no!
no!
no!
no!
CONTAINS!
CONTAINS!
CONTAINS!

我可能做错了什么?如果需要更多信息或澄清,请告知我们。

1 个答案:

答案 0 :(得分:2)

if ($.inArray(aos[i], dennis)) {

“$ .inArray()”的返回值不是布尔值。这是一个索引。因此得到一个布尔“它在数组中吗?”回答,你比较-1,这是在找不到项目时返回的。

if ($.inArray(aos[i], dennis) > -1) {

你也可以只写~$.inArray(aos[i], dennis)得到一个布尔值,但是我很犹豫,因为一些成年人可能会对我大喊大叫。

现在,那就是说,你发布的代码中缺少一些非常重要的东西:什么是“我”?