09.11.2019, 22:45
|
Новичок на форуме
|
|
Регистрация: 09.11.2019
Сообщений: 6
|
|
Как вставить новый объект между двумя соседними?
Здравствуйте!
Имеется объект следующей структуры:
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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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);
|
|
09.11.2019, 23:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от zheka79
|
между элементами с id 17999994000 и 17999995000
|
Может быть между 17999995000 и 17999996000? Для чего это, чтобы отсортированный по id порядок?
|
|
10.11.2019, 00:14
|
Новичок на форуме
|
|
Регистрация: 09.11.2019
Сообщений: 6
|
|
Совершенно верно. Опечатался. Нужен именно отсортированный по id порядок. Но сортировать не надо. Интересует именно вставка и удаление.
|
|
10.11.2019, 00:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Тогда вставляйте после чего сортируйте в любое время:
Obj.data.push({"symbol":"XBT","id":17999995500,"side":"Buy","size":50,"price":90}); //это добавить новый объект в массив
Obj.data.sort((a, b)=> a.id - b.id); //а это отсортировать его объекты по ключу id
|
|
10.11.2019, 00:34
|
Новичок на форуме
|
|
Регистрация: 09.11.2019
Сообщений: 6
|
|
Спасибо за ответы
|
|
10.11.2019, 01:12
|
Новичок на форуме
|
|
Регистрация: 09.11.2019
Сообщений: 6
|
|
А как удалить объект с определенным id?
|
|
10.11.2019, 01:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от zheka79
|
А как удалить объект с определенным id?
|
пост #2 там удаление и добавление от одного элемента до массива элементов.
строка 14 удаление обьекта с id = 17999996000
строка 22 добавление трёх обьектов после обьекта с dx = 17999994000;
Последний раз редактировалось рони, 10.11.2019 в 01:37.
|
|
10.11.2019, 01:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
У вас массив объектов, а в нем удалить элемент сократив массив, это выполнить функцию splice (почитать, это не так сложно для понимания), в которую нужно передать индекс элемента, в котором и находится объект с указанным ID, и количество удаляемых элементов, то есть для удаления одного 1.
var del = 17999994000, //id удялемого
i = Obj.data.findIndex(({id}) => id == del); //индекс удаляемого объекта в массиве
Obj.data.splice(i, 1); //удаление
|
|
10.11.2019, 01:52
|
Новичок на форуме
|
|
Регистрация: 09.11.2019
Сообщений: 6
|
|
Парни, реально помогаете. Спасибо!
А как перебрать data и получить значения id, price, size?
Пробовал
for (var key in Obj.data)
{
console.log(key);
}
не прокатывает. На php таких проблем нет.
|
|
|
|