Javascript массив, содержащий объектную логику сбой. Что не так? - PullRequest
0 голосов
/ 07 июня 2011

У меня есть два массива, один из которых содержит все уникальные значения другого массива.Второй массив содержит уникальные значения повторяющихся значений, найденных в другом массиве.

Следующий код ниже проходит по первому массиву и проверяет, соответствует ли значение в этом индексе массива значению во втором индексе массива.за дублированный предмет.Если это произойдет, он добавит стрелку перед текстом элемента.

Похоже, что он работает неправильно и печатает первый массив, а не проверяет наличие дублированного элемента.

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 Ответ

2 голосов
/ 07 июня 2011
if ($.inArray(aos[i], dennis)) {

Возвращаемое значение из $ .inArray () не является логическим значением. Это индекс. Таким образом, чтобы получить логическое значение "это в массиве?" ответ, вы сравниваете с -1, который возвращается, когда элемент не найден.

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

Вы также можете написать просто ~$.inArray(aos[i], dennis), чтобы получить логическое значение, но я не решаюсь рекомендовать это, потому что некоторые взрослые, вероятно, будут кричать на меня.

Теперь, как говорится, в опубликованном вами коде чего-то очень не хватает: что такое "i"?

...