一,针对于数组
const arr = ['a','b','c','d'];
Array.indexOf 将“返回第一次出现给定元素的索引”;
console.log(arr.indexOf('b')); // 1
Array.includes 只想知道数组是否包含某个值;布尔值
console.log(arr.includes('c')); // true
二,针对于数组对象
const objArr = [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 5, name: 'b' }, ] function getObj (name) { return objArr => objArr.name===name; }
Array.filter 返回一个新的数组,过滤,它接受一个回调函数作为参数,基于一个包含所有元素的数组创建出一个新的数组。遍历整个数组;
console.log(objArr.filter(getObj('b'))); // [{ id: 2, name: 'b' },{ id: 5, name: 'b' }]
Array.find 返回一个元素值,只要找到第一个满足回调函数的元素,Array.find 就会停止,返回的是一个元素值,无需遍历整个数组;
console.log(objArr.find(getObj('b'))); // {id: 2, name: "b"}
Array.some 返回所需的布尔值。另外,从语义上看,Array.some 表示我们只想知道某个元素是否存在,而不需要得到这个元素。
console.log(objArr.some(getObj('b'))); // true
二,在数组对象中找到满足条件的对象,并对其累加新的属性值
方法一:最直接,最简单,用 Array.reduce
// 回调函数 function callbackReduce (x,y) { return y.name === 'b' ? x.concat(Object.assign({},y,{age:11})) : x } // reduce(回调函数,空数组) console.log(objArr.reduce(callbackReduce,[])) // [{id: 2, name: "b", age: 11},{id: 5, name: "b", age: 11}]
方法二 :间接,需要Array.filter和Array.map一起用才能实现
console.log( objArr .filter(x => x.name === 'b') .map(x => Object.assign({},x,{color:'red'})) ) // [{ id: 2, name: "b", color: "red" }, { id: 5, name: "b", color: "red" }]