métodos de travessia em JavaScript, matrizes e objetos resumo
Laço através do processo de escrita é uma operação muito frequente, JavaScript fornece um número de métodos para conseguir.
Este artigo irá resumir os métodos leque de atravessamento e objetos, o novato pode jogar uma série de conhecimentos adquiridos através deste artigo.
travessia matriz
Método a: para o laço
O laço for é o mais utilizado, mas também para otimizar o desempenho do melhor percurso tipo.
var arr = ["a", "b", "c"];
for (var i = 0; i < arr.length; i++) { console.log(arr[i]) } // a b c
O mesmo tipo de um ciclo convencional, e ao mesmo tempo também laços do / while loop.
A diferença entre eles é que, para o laço saber com antecedência o número de ciclos, enquanto que os ciclos não sabe o número de ciclos, do / while será pelo menos o número.
Método dois: for-de travessia
para-de ES6 é a nova sintaxe. valor de passagem directamente, em vez de um índice de matriz (ou atributo do objecto).
var arr = ["a", "b", "c"];
for (let item of arr) { console.log(item); } // a b c
Na verdade, para-de declaração só pode percorrer um array de objetos.
Você também pode Matriz iterativo, Mapa, Set, String e outros objetos.
// 遍历String
let str = "Hello";
for (let value of str) { console.log(value) } // H e l l o // 遍历Map let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]); for (let entry of iterable) { console.log(entry); } // ["a", 1] // ["b", 2] // ["c", 3] for (let [key, value] of iterable) { console.log(value); } // 1 // 2 // 3
para-de obras, solicitando um loop iteração opor-se ao objecto, e, em seguida, devolve o valor obtido pela seguinte () objeto método iteração.
Uma matriz de embutidos @@iterator
, @@iterator
não a iteração, mas a função retorna um objeto iteração.
var arr = ["a", "b","c"];
var it = arr[Symbol.iterator](); console.log(it.next()); // { value: 'a', done: false } console.log(it.next()); // { value: 'b', done: false } console.log(it.next()); // { value: 'c', done: false } console.log(it.next()); // { value: undefined, done: true }
O código acima, o valor representa o valor atual da travessia, feito é um valor booleano que indica se o valor também pode travessia.
Deve-se notar que os objetos ordinários não são construídos @@iterator
, não pode ser usado para-de travessia.
A razão para isso é muito complexa, em termos simples, é para evitar o impacto do tipo futuro objeto.
No entanto, podemos Object.defineProperty(...)
definir para o objeto @@iterator
.
Detalhes podem ser [aqui entendido] ( https://github.com/getify/You-Dont-Know-JS/blob/1ed-zh-CN/this % objecto 26 é protótipos / ch3.md).
Método três: Array Método
A fim de se adaptar a diferentes formas de atravessamento, matrizes de JavaScript construiu uma série de métodos.
Por exemplo, mais comumente usado forEach()
método, para escrever, você pode tornar o código mais conciso.
var arr = ["a", "b", "c"];
arr.forEach((index, item) => { console.log(index, item) }) // a 0 // b 1 // c 2
map()
método
var arr = [1, 2, 3];
var newArr = arr.map(item => { return item * 2; }); console.log(newArr); // [2, 4, 6]
filter()
método
var arr = [1, 2, 3];
var newArr = arr.filter(item => { return item > 1; }); console.log(newArr); // [2, 3]
reduce()
ES5 novo método foi projetado para operação abaixo concepção de tal acumulação.
Ele realmente pode fazer do que ser rico, o papel simplesmente introduz os detalhes básicos de uso pode ver este artigo .
var arr = [1, 2, 3];
var sum = arr.reduce((pre, cur) => { return pre + cur; }); console.log(sum); // 6
every()
Um método para detectar se todos os elementos da matriz que satisfazem os critérios especificados.
É geralmente os seguintes some()
métodos em conjunto entendimento.
var arr = [1, 2, 3];
var bool = arr.every(item => { return item < 5; }); console.log(bool); // true
some()
Um método para detectar a presença ou ausência dos elementos de matriz que satisfazem os critérios especificados.
O exemplo seguinte é detectar a presença ou ausência do número Tipo de elemento de matriz.
var arr = ["a", 1, "b"];
var bool = arr.some(item => { return typeof item === "number"; }); console.log(bool); // true
métodos de travessia objecto
Atravessar o objeto em relação a alguns problemas.
Existem duas maneiras para atravessar o objecto pode ser alcançado, uma utilização directa para-em malha; Noutra forma de realizao, o objecto é convertido em uma matriz, e em seguida atravessada.
Método Um: para-em malha
para-em concebido para navegar no objecto podem ser enumerados atributo, os atributos, incluindo a cadeia protótipo protótipo, de modo que o desempenho será relativamente pobre.
O que é propriedade enumeráveis ?
Como pode ser visto a partir do nome, é a propriedade do objecto aparece na iteração (enumeração), tal como para-em malha.
var obj = { a: 2, b: 4, c: 6 }; for (let key in obj) { console.log(key); } // a b c
Método dois: Object.keys () e Object.getOwnPropertyNames ()
Object.key()
Ele retorna um array contendo todas as propriedades enumeráveis; Object.getOwnPropertyNames()
também retorna uma matriz que contém todos os elementos, independentemente de haver ou não enumeráveis.
Deve-se notar que tanto só olha para propriedades personalizadas do objeto.
var obj = { a: 2, b: 4, c: 6 }; // Object.keys() Object.keys(obj).forEach(key => { console.log(key); }) // a b c // Object.getOwnPrepertyNames() Object.getOwnPropertyNames(obj).forEach(key => { console.log(key); }) // a b c
Além disso, também podem Reflect.ownKeys(obj)
ser métodos de passagem.
Ele retorna um array contendo objetos atributos personalizados, se o nome do atributo é símbolo ou corda, ou não enumeráveis.
Devido ao uso de pequenas, aqui olhar para.
Finalmente, estamos juntos diferentes objetos de passagem método de características.
caminho | Encontrar as propriedades cadeia de protótipos | Encontrar propriedades personalizadas | Encontre um propriedades não-enumeráveis |
---|---|---|---|
for-in |
✅ | ✅ | ✅ |
Object.keys(..) |
❌ | ✅ | ❌ |
Object.getOwnpropertyNames(..) |
❌ | ✅ | ✅ |
Meu filho Binbin