Сравнение значений ключей объектов массива
Приветствую.
Подскажите, как проверить каждое значение? 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, время: 08:06. |