Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.12.2019, 10:33
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Aetae, ваша философия «отбрасывания концов», которая якобы чётко и явно объявляет, что «дальше дороги нет» порождает в общем неочевидный код. Например, непонятно, куда возвращается true, если согласно сигнатуре метода forEach он не работает с возвращаемым значением. А если функции нет, то произойдёт преждевременный return. Может лучше вынести ветвление в отдельный метод?


Сообщение от рони
может else будет лучше смотреться, чем return в никуда?
Оно смотрится определённо лучше, философия «симметричное скольжение»...
function uniqSelected(...arrays) {
	const result = [], map = {}

	for(const array of arrays)
		for(const item of array)
			if(item.id in map)
				map[item.id].selected = true
			else
				result.push(map[item.id] = { ...item })

	return result
}


Если всё-таки вынести в отдельный метод... если if-else вынести в отдельный метод, то «внутренний интерпретатор» Aetae будет выполнять одинаковую последовательность команд.
function uniqSelected(...arrays) {
	const result = [], map = {}

	for(const array of arrays)
		for(const item of array)
			pushOrMarkAsSelected(item, result, map)

	return result
}

function pushOrMarkAsSelected(item, result, map) {
	if(item.id in map)
		map[item.id].selected = true
	else
		result.push(map[item.id] = { ...item })
}


ЕЩЁ Хотя философия «отбрасывания концов» в большинстве случаев может заменена более подходящими идеями, она определённо работает, когда вам не нужно выполнение (или оно может быть завершено раннее), поскольку не подходят условия... Например...
function submit() {
	let name, address, phone

	if(name = nameField.value) {} else {
		alert("No name to submit")
		return
	}

	if(address = addressField.value) {} else {
		alert("No address to submit")
		return
	}

	if(phone = phoneField.value) {} else {
		alert("No phone to submit")
		return
	}

	sendToServer(name, address, phone)
}

function sendToServer(name, address, phone) {
	// ...
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить определенный объект из массива объектов? Rmydar Общие вопросы Javascript 5 04.02.2018 18:16
Как передать в массив перемеенную как ключ массива? фдуч Общие вопросы Javascript 15 11.01.2018 21:21
Клик на "аккордеон" на внутренней срабатывает как ссылка (без раскрытия) LouDminsk jQuery 4 14.06.2017 11:18
Как создать цитатник? WGN Общие вопросы Javascript 10 29.01.2017 01:39
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53