Фильтр JavaScript по сравнению с проблемой карты

Как продолжение моей минуты / макс. через массив объектов я задавался вопросом о сравнениях производительности фильтра по сравнению с картой.

Таким образом, я соединил тест на значениях в моем коде, когда собирался посмотреть на результаты в FireBug.

Это - код:

var _vec = this.vec;
min_x = Math.min.apply(Math, _vec.filter(function(el){ return el["x"]; }));
min_y = Math.min.apply(Math, _vec.map(function(el){ return el["x"]; }));

mapверсия плетеной корзинки возвращает корректный результат. Однако filterверсия редактора возвращает NaN. Выламывая его, ступая через и наконец осматривая результаты, казалось бы, что внутренняя функция возвращается x свойство _vec но фактический массив, возвращенный из filter нефильтрованный _vec.

Я верю своему использованию filter корректно - кто-либо еще может видеть мою проблему?

Вот простой тест:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>S:GTC Map Test</title>
</head>
<body>
<script type="text/javascript">
function vector(x,y,z) { this.x = x; this.y =y; this.z=z; }
var vec = [];
vec.push(new vector(1,1,1));
vec.push(new vector(2,2,2));
vec.push(new vector(2,3,3));
var _vec = vec;
min_x = Math.min.apply(Math, _vec.filter(function(el){ return el["x"]; }));
min_y = Math.min.apply(Math, _vec.map(function(el){ return el["x"]; }));

document.write("<br>filter = " + min_x);
document.write("<br>map = " + min_y);
</script>
</body>
</html>
16
задан demongolem 22 June 2011 в 15:34
поделиться

1 ответ

Нет, метод filter не возвращает массив без фильтрации. Он возвращает массив, содержащий элементы, в которых внутренняя функция возвращает истину.

Поскольку вы не возвращаете логическое значение из внутренней функции, значение преобразуется в логическое, поэтому ссылка на объект преобразуется в истину. Таким образом, он возвращает новый массив, содержащий все элементы из исходного массива.

Метод filter не работает так же, как метод map . Метод map используется для преобразования каждого элемента массива, а метод filter используется для выбора определенных элементов массива. Сравнивать производительность между методами спорно, так как только один из них делает то, что вы хотите.

49
ответ дан 30 November 2019 в 15:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: