Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как конкатенировать два массива объектов без дублей? (https://javascript.ru/forum/misc/79143-kak-konkatenirovat-dva-massiva-obektov-bez-dublejj.html)

Malleys 25.12.2019 10:33

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) {
	// ...
}


Часовой пояс GMT +3, время: 12:21.