Задний план
Я пытаюсь проверить наличие значения в массиве A во втором массиве B. Каждое значение является наблюдаемым числом. Каждое наблюдаемое число содержится в наблюдаемом массиве. Сравнение всегда возвращает -1, что, как известно, неверно (поскольку значения в A и B перекрываются). Следовательно, у меня что-то не так с логикой или синтаксисом, но я не смог понять, где.
JSBin (полный проект): http://jsbin.com/fehoq/182/edit
JS
//set up my two arrays that will be compared
this.scores = ko.observableArray();
//lowest is given values from another method that splices from scores
this.lowest = ko.observableArray();
//computes and returns mean of array less values in lowest
this.mean = (function(scores,i) {
var m = 0;
var count = 0;
ko.utils.arrayForEach(_this.scores(), function(score) {
if (!isNaN(parseFloat(score()))) {
//check values
console.log(score());
// always returns -1
console.log(_this.lowest.indexOf(score()));
//this returns an error, 'not a function'
console.log(_this.lowest()[i]());
//this returns undefined
console.log(_this.lowest()[i]);
//only do math if score() isn't in lowest
// again, always returns -1, so not a good check
if (_this.lowest.indexOf(score())<0) {
m += parseFloat(score());
count += 1;
}
}
});
// rest of the math
if (count) {
m = m / count;
return m.toFixed(2);
} else {
return 'N/A';
}
});
Обновлять
@Major Byte отметил, что mean() вычисляется до того, как что-либо будет перемещено в lowest
, поэтому я получаю undefined
. Если это так, то как лучше всего обеспечить, чтобы метод mean() обновлялся в зависимости от изменений в lowest
?
i
всегда будет терпеть неудачу, если вы не дадите ей значение... - person PW Kad   schedule 09.05.2014i
передается ему из привязки данных. Это$index()
вforeach
. - person Jefftopia   schedule 09.05.2014// always returns -1 console.log(_this.lowest.indexOf(score()));
, что верно, потому что в этот момент наблюдаемый массив_this.lowest
пуст, потому что он устанавливается/заполняется только при нажатии кнопкиDrop Lowest Score
- person Major Byte   schedule 10.05.2014console.log(_this.lowest()[i]);
. Может быть, он не определен, потому что не имеет значений? - person Jefftopia   schedule 10.05.2014console.log(_this.lowest()[i]());
былаnot a function
. Обновление исходного сообщения, чтобы прояснить два похожих, но разных оператора журнала и то, что они возвращают. - person Jefftopia   schedule 10.05.2014mean
ako.computed
. Поскольку оценка вычисляемогоmean
будет считываться как из наблюдаемыхscores
, так и из наблюдаемыхlowest
, вычисляемоеmean
будет переоцениваться каждый раз при изменении любой из этих наблюдаемых. Я предлагаю вам ознакомиться с документацией по вычисляемым наблюдаемым объектам Knockout. - person Robert Westerlund   schedule 10.05.2014ko.computed
не принимает аргументов, поэтому я не думаю, что это сработает. Этот вопрос заставляет меня думать, что обычной функции, которая принимает наблюдаемые в качестве аргументов, должно быть достаточно. stackoverflow.com/questions/23299194/ а> - person Jefftopia   schedule 10.05.2014scores
иlowest
. - person Jefftopia   schedule 10.05.2014