2013-11-21 4 views
2

The map функция выглядит намного лучше, чем for цикла:Вызов функции без назначения ее результат переменной

var arr = ["Apple", "Orange"]; 
// map example 
arr.map(function(item){ eat(item); }); 
// for example 
for(var i=0; i<arr.length; i++){ 
    eat(arr[i]); 
} 

И я предпочел бы map над for но:

  1. функция, который map становится как аргумент, должен иметь возвращаемое значение, которое должно быть уменьшено до массива, который должен возвращаться map. Какое влияние имеет передача функции viod на map, как в моем примере?
  2. map возвращает массив. Что произойдет, если я не назначу его переменной, как в моем примере?
  3. Есть ли какая-либо функция пустоты, например map?
+1

То, что произошло в этом названии? «assuaging» :) – tymeJV

+0

3. ['Array.prototype.forEach'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) – cHao

ответ

2

Функция, которая преобразуется в качестве аргумента, должна иметь возвращаемое значение, которое должно быть уменьшено до массива, на который должна возвращаться карта. Какое влияние имеет передача функции viod на карту, как в моем примере?

Значение, возвращаемое функцией без оператора возврата, равно undefined. Таким образом, если вы передаете функцию, которая никогда не возвращает ничего для сопоставления, она создаст новый массив с длиной, равной вашему исходному массиву, и каждое значение будет undefined.

map возвращает массив. Что произойдет, если я не назначу его переменной, как в моем примере?

Массив все еще создан, но он будет отброшен сразу же после создания и сбора мусора в ближайшее время. Такое поведение может быть оптимизировано двигателем JS!

Есть ли какая-либо функция пустоты, такая как карта?

Как и все остальные отмечали, есть функция Array.prototype.forEach которая перебирает массив (аналогично карте), но не создает новый массив или использовать результат обратного вызова, связанного с ним каким-либо образом.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

1

Вы ищете .forEach().

Вы можете обнаружить, что просмотр MDN documentation - лучший способ накопить такую ​​информацию, не задавая вопросов. На данный момент, по крайней мере, я надеюсь, что этот ответ успокоит ваши страдания.

— Что касается вопроса 1, ничего не повредит. Функция .map() построит массив, полный записей undefined. (Я думаю.)

Для 2, это также нормально. Никогда не стоит игнорировать возвращаемое значение функции, по крайней мере, в отношении времени выполнения.

+0

Приятный ответ для 3. пункт. Но я не могу найти информацию для 1. и 2. – speechkey

+0

@speechkey ok Я думаю, что вижу то, о чем вы просите; Я добавлю к своему ответу. – Pointy

1

1. Функция, которая карта становится в качестве аргумента должны иметь возвращаемое значение, чтобы быть сводится к массиву, который карта должна вернуть. Какое влияние имеет передача функции viod на карту, как в моем примере?

var numbers = [1, 4, 9]; 
var mapped = numbers.map(function(){ 
    //do nothing 
}); 
console.log(numbers);//[1, 4, 9] 
console.log(mapped);//[undefined, undefined, undefined] 

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

2. map возвращает массив. Что произойдет, если я не назначу его переменной, как в моем примере ?

ничего не произойдет, вы потеряете измененный массив.

3. Есть ли какая-либо функция пустоты, такая как карта?

Все методы массива оленья кожа изменить опорный массив, EG

Array.concat(value1[value2[value...]]) 
Array.every(function) 
Array.filter(function) 
Array.forEach(function) 
Array.join(delimeter) 
Array.indexOf(searchStr[, startIndex]) 
Array.lastIndexOf(searchStr[, startIndex]) 
Array.map(function) .... etc 

но Array.splice(), push, pop, shift, unshift,.. etc изменится

+0

'Array.prototype.slice' не изменяет массив. Единственными методами, которые изменяют массив, являются 'splice',' push', 'pop',' shift', 'unshift'. – Tibos

+0

есть .. отредактировал ans – Sarath

Смежные вопросы