На данный вопрос уже ответили:
подскажите как можно выполнить сортировку по возрастанию по y в данном массиве объектов:
var Objs = {
0.98401984: {
1: {
x: 123,
y: 123,
},
2: {
x: 123,
y: 123,
},
3: {
x: 123,
y: 123,
},
},
0.12930572: {
1: {
x: 456,
y: 456,
},
2: {
x: 456,
y: 456,
},
3: {
x: 456,
y: 456,
},
0.2309328: {
1: {
x: 789,
y: 789,
},
2: {
x: 789,
y: 789,
},
3: {
x: 789,
y: 789,
},
},
в моем примере они уже отсортированы как мне нужно, но дело в том что когда объект меняет значение Y то данная сортировка нарушается, а мне нужно ее сохранять...
это то что вам надо
var Objs = {
0.98401984: {
1: {
x: 123,
y: 5,
},
2: {
x: 123,
y: 1,
},
3: {
x: 123,
y: 12,
},
},
0.12930572: {
1: {
x: 456,
y: 4342356,
},
2: {
x: 456,
y: 4256,
},
3: {
x: 456,
y: 423456,
},
},
0.2309328: {
1: {
x: 789,
y: -789,
},
2: {
x: 789,
y: 2342789,
},
3: {
x: 789,
y: 23789,
},
},
}
for (const key in Objs) {
var temp =[];
for (const key2 in Objs[key]) {
temp.push(Objs[key][key2]);
}
temp = temp.sort((a, b) => a.y - b.y);
Objs[key] = {};
for (let i= 0; i < temp.length; i++) {
Objs[key][i + 1] = temp[i];
}
}
console.log(Objs);
Выведет
{ '0.98401984':
{ '1': { x: 123, y: 1 },
'2': { x: 123, y: 5 },
'3': { x: 123, y: 12 } },
'0.12930572':
{ '1': { x: 456, y: 4256 },
'2': { x: 456, y: 423456 },
'3': { x: 456, y: 4342356 } },
'0.2309328':
{ '1': { x: 789, y: -789 },
'2': { x: 789, y: 23789 },
'3': { x: 789, y: 2342789 } } }
вот тогда почитал ваш комент
var tempY = [];
for (const key in Objs) {
for (const key2 in Objs[key]) {
tempY.push({
name: key,
data: {
y: Objs[key][key2].y,
x: Objs[key][key2].x
}
})
}
}
var highest = tempY.sort((a, b) => b.data.y - a.data.y)[0];
var result = {};
var names = Array.from(new Set(tempY.map(v => v.name)));
for (const value of names) {
var local = {};
var data = tempY.filter(v => v.name == value).map(v => v.data).sort((a, b ) => a.y - b.y);
for (let index = 0; index < data.length; index++) {
local[index + 1] = {
x: data[index].x,
y: data[index].y
}
}
result[value] = local
}
console.log(result);
Выведет
{ '0.12930572':
{ '1': { x: 456, y: 4256 },
'2': { x: 456, y: 423456 },
'3': { x: 456, y: 4342356 } },
'0.2309328':
{ '1': { x: 789, y: -789 },
'2': { x: 789, y: 23789 },
'3': { x: 789, y: 2342789 } },
'0.98401984':
{ '1': { x: 123, y: 1 },
'2': { x: 123, y: 5 },
'3': { x: 123, y: 12 } } }
Чтобы отсортировать объект, его нужно превратить в массив
let Objs = [
{
1: {
x: 123,
y: 123,
},
2: {
x: 123,
y: 123,
},
3: {
x: 123,
y: 123,
},
},
{
1: {
x: 456,
y: 456,
},
2: {
x: 456,
y: 456,
},
3: {
x: 456,
y: 456,
},
},
{
1: {
x: 789,
y: 789,
},
2: {
x: 789,
y: 789,
},
3: {
x: 789,
y: 789,
},
},
];
Objs[2][1].y = 100
Objs = Objs.sort((a,b) => {
return a[1].y-b[1].y
});
console.log(Objs)
Какой вопрос - такой ответ((
Объект сортировать геморройно и бессмысленно. Если вам нужно ВЫВОДИТЬ куда-то объект, сохраняя определенный порядок свойств, то создайте массив, в который выведите эти свойства в нужном порядке:
var ObjIndexer = ["0.98401984", "0.12930572", "0.2309328", ...]
Если потом вам требуется дергать функцию, которая принимает только объекты, передавая ей их в нужном порядке, передавайте их, например, в цикле, перебирающем вышеуказанный массив:
for (i = 0; i < ObjIndexer.length; i++) {
your_function(Objs[ObjIndexer[i]]);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне надо заменить в БД значение ячейки, если оно попадает под условиеДелаю такой запрос: