Сравнение значений ключей объектов массива
Приветствую.
Подскажите, как проверить каждое значение?
let client = []
let sameClient = []
client[0] = {
name: "John",
age: "25"
}
client[1] = {
name: "John",
age: "25"
}
client[2] = {
name: "Tom",
age: "30"
}
client[3] = {
name: "Tom",
age: "42"
}
for(let i = 0; i < client.length; i++){
если имена и возрасты объектов равны, то
sameClient.push(client[i].name, client[i].age)
}
|
Цитата:
В первом берешь элемент... А во втором перебираешь остальные и сравниваешь. |
Цитата:
|
Интересно откуда они вообще появились.
|
а можно оба варианта в качестве примера?
за один, это через reduce? и ещё, подскажите что не так делаю. я привёл пример массива, но у меня не получается именно такой сделать. Есть такая функция:
let clients = []
let index = 0;
for (let key of this.data) {
clients[index] = {
name: name,
age: age
}
index++
}
[ { name: 'John', age: '25' } ]
[ { name: 'John', age: '25' } ]
[ { name: 'Tom', age: '30' } ]
[ { name: 'Tom', age: '42' } ]
Не понимаю, почему получается 4 массива, а не один с 4 объектами. Как привести к нужному виду? Или такой циклом перебрать. |
Цитата:
|
Цитата:
|
Цитата:
|
поиск объектов с одинаковой структурой
yozuul,
const clients = [
{ name: 'John', age: '25' },
{ name: 'John', age: '25' },
{ name: 'Tom', age: '30' },
{ name: 'Tom', age: '42' } ], temp = {}, sameClient = [];
clients.forEach(({name, age}) => {temp[[name, age]] = (temp[[name, age]] || 0) + 1;temp[[name, age]] == 2 && sameClient.push({name, age})})
console.table(sameClient)
|
рони,
Ого. А как это вообще работает? temp[[name, age]] = (temp[[name, age]] || 0) + 1 Что это? |
let clients = [
{
name: "John",
age: "25"
},
{
name: "John",
age: "25"
},
{
name: "Tom",
age: "30"
},
{
name: "Tom",
age: "42"
}
]
// let sameClients = clients.reduce((acc, cur, idx) => {
// if (clients.find(({ name, age }, i) => i !== idx && name === cur.name && age === cur.age)) {
// if (!acc.find(({ name, age }) => name === cur.name && age === cur.age)) {
// acc.push(cur)
// }
// }
// return acc
// }, [])
// по всем ключам объекта
let sameClients = clients.reduce((acc, cur, idx) => {
if (
clients.find((c, i) => i !== idx && JSON.stringify(c) === JSON.stringify(cur))
&&
!acc.find((c) => JSON.stringify(c) === JSON.stringify(cur))
) {
acc.push(cur)
}
return acc
}, [])
console.log(sameClients)
// for (let i = 0; i < client.length; i++) {
// если имена и возрасты объектов равны, то
// sameClient.push(client[i].name, client[i].age)
// }
|
Цитата:
в качестве ключа temp связка ключей из элемента(объекта) массива clients. Цитата:
|
Цитата:
Пока ты не научишься "думать как программа", у тебя не получится составлять алгоритмы. |
| Часовой пояс GMT +3, время: 16:46. |