Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как вставить новый объект между двумя соседними? (https://javascript.ru/forum/dom-window/78828-kak-vstavit-novyjj-obekt-mezhdu-dvumya-sosednimi.html)

zheka79 09.11.2019 22:45

Как вставить новый объект между двумя соседними?
 
Здравствуйте!
Имеется объект следующей структуры:
var Obj = {
      {
      "table":"orderBook",
       "data":[
        {"symbol":"XBT","id":17999992000,"side":"Sell","size":100,"price":80},
        {"symbol":"XBT","id":17999993000,"side":"Sell","size":20,"price":70},
        {"symbol":"XBT","id":17999994000,"side":"Sell","size":10,"price":60},
        {"symbol":"XBT","id":17999995000,"side":"Buy","size":10,"price":50},
        {"symbol":"XBT","id":17999996000,"side":"Buy","size":20,"price":40},
        {"symbol":"XBT","id":17999997000,"side":"Buy","size":100,"price":30}
      ]
    }


Как добавить новый элемент data id которого будет скажем 17999995500 между элементами с id 17999994000 и 17999995000?

И как удалить элемент data c заданным значением id?

Заранее спасибо за помощь!

рони 09.11.2019 23:32

zheka79,
const Obj =
      {
      "table":"orderBook",
       "data":[
        {"symbol":"XBT","id":17999992000,"side":"Sell","size":100,"price":80},
        {"symbol":"XBT","id":17999993000,"side":"Sell","size":20,"price":70},
        {"symbol":"XBT","id":17999994000,"side":"Sell","size":10,"price":60},
        {"symbol":"XBT","id":17999995000,"side":"Buy","size":10,"price":50},
        {"symbol":"XBT","id":17999996000,"side":"Buy","size":20,"price":40},
        {"symbol":"XBT","id":17999997000,"side":"Buy","size":100,"price":30}
      ]
    }
let  idx = 17999996000;
const  findIndexObj = idx =>  Obj.data.findIndex(({id}) => id === idx);
const  changeData = (idx,  deleteCount = 1, elem) => elem ? Obj.data.splice(i,deleteCount, ...elem) : Obj.data.splice(i,deleteCount)
let i = findIndexObj(idx)
changeData(i)
console.table(Obj.data);
idx = 17999994000;
i = findIndexObj(idx) + 1;
let a = {id : 17999995500}, b = {id : 17999995501}, c = {id : 17999995502}
changeData(i,0, [a, b, c])
console.table(Obj.data);

laimas 09.11.2019 23:57

Цитата:

Сообщение от zheka79
между элементами с id 17999994000 и 17999995000

Может быть между 17999995000 и 17999996000? Для чего это, чтобы отсортированный по id порядок?

zheka79 10.11.2019 00:14

Совершенно верно. Опечатался. Нужен именно отсортированный по id порядок. Но сортировать не надо. Интересует именно вставка и удаление.

laimas 10.11.2019 00:14

Тогда вставляйте после чего сортируйте в любое время:

Obj.data.push({"symbol":"XBT","id":17999995500,"side":"Buy","size":50,"price":90}); //это добавить новый объект в массив
Obj.data.sort((a, b)=> a.id - b.id); //а это отсортировать его объекты по ключу id

zheka79 10.11.2019 00:34

Спасибо за ответы

zheka79 10.11.2019 01:12

А как удалить объект с определенным id?

рони 10.11.2019 01:35

Цитата:

Сообщение от zheka79
А как удалить объект с определенным id?

пост #2 там удаление и добавление от одного элемента до массива элементов.
строка 14 удаление обьекта с id = 17999996000
строка 22 добавление трёх обьектов после обьекта с dx = 17999994000;

laimas 10.11.2019 01:36

У вас массив объектов, а в нем удалить элемент сократив массив, это выполнить функцию splice (почитать, это не так сложно для понимания), в которую нужно передать индекс элемента, в котором и находится объект с указанным ID, и количество удаляемых элементов, то есть для удаления одного 1.

var del = 17999994000, //id удялемого
 i = Obj.data.findIndex(({id}) => id == del); //индекс удаляемого объекта в массиве
Obj.data.splice(i, 1); //удаление

zheka79 10.11.2019 01:52

Парни, реально помогаете. Спасибо!
А как перебрать data и получить значения id, price, size?

Пробовал
for (var key in Obj.data)
{
   console.log(key);
}


не прокатывает. На php таких проблем нет.

zheka79 10.11.2019 01:56

Предыдущий пост уже не актуален. Сам разобрался. Спасибо!

laimas 10.11.2019 02:13

Цитата:

Сообщение от laimas
У вас массив объектов

Значит берете обычный цикл for, или forEach() (ссылку на функции массива я же давал), а в цикле обращайтесь к свойствам объекта, например:

Obj.data.forEach(function(o) {
    console.log(o.size, o.price) //вывод в консоль значений свойств size и price
})

//это же самое, но стрелочной функцией
Obj.data.forEach((o) => console.log(o.size, o.price))

//это это же, но в качестве аргументов сразу переданы значения свойств объекта size и price 
Obj.data.forEach(({size, price}) => console.log(size, price))

Malleys 10.11.2019 04:34

Цитата:

Сообщение от zheka79
А как перебрать data и получить значения id, price, size?

for(const { id, size, price } of Obj.data)
    console.log(id, size, price)


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