Предисловие: 18.01.2018, 12:24 Впервые публикую статью о Наггетс. Удивительно, что так много лайков. Спасибо за высокую оценку [Спасибо]. В связи с загруженностью работой, я буду продолжать дополнять и обновлять эту статью, когда у меня будет время на этой неделе.Если вам это нравится, вы можете следить за новостями по лайку или избранному. Еще раз спасибо [лук]~!
Обновлено 19.01.18:35:
- 1. Режим реализации дедупликации массива, указанный старыми железками в комментариях, дедупликация строк;
- 2. Добавьте введение словосочетания фильтр + карта (на самом деле, я хочу поговорить о том, что это [закрой свое лицо]);
- 3. Увлажните текстовое выражение и добавьте необходимые аннотации;
- 4. Рефакторинг верстки
filter
1. Определение
filter вызывает функцию обратного вызова один раз для каждого элемента в массиве и создает новый массив со всеми элементами, для которых «обратный вызов возвращает true или значение, эквивалентное true».
var new_array = arr.filter(callback[, thisArg])
2. Основное использование
var spread = [12, 5, 8, 130, 44]
// 筛选条件符合大于10的新数组
var filtered = spread.filter(n => n >= 10)
console.log('filtered', filtered) // => [12, 130, 44]
3. Расширенное использование
Поиск по ключу/значению объекта массива
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'ared', 'age': 24, 'active': false },
{ 'user': 'ered', 'age': 80, 'active': false },
{ 'abc': 'ered', 'age': 80, 'active': false }
]
// 筛选 age等于40或者age等于24的 数组对象
var filtered = users.filter(n => n.age===40 || n.age===24)
console.log('filter后的键名', filtered) // => [{user: "fred", age: 40, active: false},{user: "ared", age: 24, active: false}]
4. Расширенное использование
4.1 Дедупликация массива
var spread = [12, 5, 8, 8, 130, 44,130]
var filtered = spread.filter((item, idx, arr) => {
return arr.indexOf(item) === idx;
})
// 筛选符合条件找到的第一个索引值等于当前索引值的数组
console.log('数组去重结果', filtered)
Благодаря старым утюгам, таким как @yuantongxue в области комментариев, за то, что они поделились своими идеями, режим реализации массива для повторного использования метода set ES6
var spread = [12, 5, 8, 8, 130, 44,130]
var setFun = [...new Set(spread)]
console.log('数组去重结果', setFun)
Спасибо за дедупликацию строки, которой поделился @rookie_it_old iron в области комментариев, вы можете сослаться на нее
var arr=[12, 5, 8, 8, 130, 44,130,'a','b','a']
var obj={};
arr.forEach(function(item){
obj[item]=item;
})
Object.keys(obj)
console.log(Object.keys(obj))
Всеобщая дискуссия о дедупликации массивов все еще довольно интенсивна. Поэтому в 18 лет я создал группу для общения всех желающих.Для оптимизации логики реализации кода можно добавить группу WeChat внизу статьи.В будущем возможно организую офлайн-мероприятия и вечеринки программистов, ха-ха ~~Мир кода прекрасен, растем вместе.
4.2 Удалить пустые строки в массиве
var spread = ['A', '', 'B', null, undefined, 'C', ' ']
var filtered = spread.filter((item, idx, arr) => {
return item && item.trim()
})
console.log('数组中的空字符串删掉', filtered) // => ["A", "B", "C"]
5. Резюме одним предложением
В полной мере используйте функцию обратного вызова, которая возвращает true в качестве функции «условия фильтрации» для создания нового массива.
6. Проектная практика
Общее словосочетание фильтра
Фильтр и карта взаимодействуют: используйте фильтр для фильтрации в соответствии с определенными условиями, а затем карту для создания нового массива.
В проекте иногда нам нужно отобразить исходный массив для генерации новых данных после фильтрации исходного массива по определенным условиям.
для + продолжить
var arr = [{
gender: 'man',
name: 'john'
}, {
gender: 'woman',
name: 'mark'
}, {
gender: 'man',
name: 'jerry'
}]
var forArr = []
for (var i = 0; i < arr.length; i++) {
// 遇到性别为女的数组对象, 跳出本次循环
if (arr[i].gender === 'woman') continue
var temp = {
name: arr[i].name
}
forArr.push(temp)
}
// 过滤掉性别为女的数组对象
console.log('男性名字集合', forArr) // => [{name: 'john'}, {name: 'jerry'}]
После использования метода for + continue мы успешно удалили объекты массива с женским полом и, наконец, отфильтровали коллекцию массивов мужских имен. Если цикл for сталкивается с несколькими уровнями вложенности, его сложнее и труднее поддерживать. Можем ли мы использовать карту вместо этого? Но карта не поддерживает и дальше выпрыгивать из цикла.
Вопрос: Затем я хочу использовать карту, чтобы уменьшить объем кода, и я хочу использовать продолжение, чтобы выйти из цикла, что мне делать?
Решение: Возможно, комбинация фильтра и карты может решить проблемы, с которыми мы столкнулись (может заменить использование for + continue)
Демонстрация кода: фильтр +написание карты
var arr = [{
gender: 'man',
name: 'john'
}, {
gender: 'woman',
name: 'mark'
}, {
gender: 'man',
name: 'jerry'
}]
// filter : 有条件的筛选,返回条件为true的数组
// 筛选出性别为男性的名字集合
var newArr = arr.filter(n => n.gender === 'man').map(item => {
return {
name: item.name
}
})
console.log('男性名字集合', newArr) // => [{name: 'john'}, {name: 'jerry'}]
После использования метода записи фильтра + карты мы просто используем две или три строки кода, чтобы реализовать функцию записи для + продолжения. Это элегантно, легко читать и поддерживать, так почему бы не сделать это?
На этом все, вышеизложенное является кратким изложением моего личного опыта. Если это полезно для вашего развития, пожалуйста, поставьте лайк. Если вы считаете, что что-то не так, пожалуйста, укажите на это. Давайте добиваться прогресса и расти вместе~. ~
общаться вместе?
У вас есть хорошие идеи, чтобы поделиться,Подпишитесь на официальную учетную запись WeChat yhzg_gz (нажмите, чтобы скопировать, добавьте официальную учетную запись в WeChat и вставьте ее), стремление к качеству кода, эффективное программирование - наша общая цель.
Написание статей может получить книгу асинхронного сообщества! Технические специалисты, которые любят читать, входят в асинхронное сообщество. я хочу читатьПишите поддерживаемый JavaScript, надеюсь, вам тоже понравится.