NodeJS 在JavaScript中替换或推送到数组

idfiyjo8  于 2023-04-29  发布在  Node.js
关注(0)|答案(2)|浏览(119)

我有一个订单数组,当我从我的WebSocket收到一个新的放置顺序或修改的顺序的消息时,我想检查我的订单数组,如果有一个现有的订单与websocket消息替换数组中的对象与websocket消息,否则将其推到数组中。
例如:

const orderArr = [
{
id: 1,
item: 'apple',
price: 20
},
{
id: 2,
item: 'mango',
price: 10
},
{
id: 3,
item: 'cucumber',
price: 300
}
]

const webSocketOrder = {
id: 1,
item: 'apple',
price: 40
}

// what should happen to the order array
[
{
id: 1,
item: 'apple',
price: 40
},
{
id: 2,
item: 'mango',
price: 10
},
{
id: 3,
item: 'cucumber',
price: 300
}
]

但是如果webSocketOrder是具有新id的新项目,则应将其作为新项目添加到orderArr
我做了什么

const foundOrder = orderArr.find(
          (x) => x.id === webSocketOrder.id
        );
        if (foundOrder) {
          orderArr.map((ord) =>
            ord.id === webSocketOrder.id 
              ? webSocketOrder
              : ord
          );
        } else {
          orderArr.unshift(webSocketOrder);
        }

这是因为某种原因不起作用,有人能帮忙吗?

l3zydbqr

l3zydbqr1#

可以使用find()/findIndex()对数组进行一次循环。

const index = orderArr.findIndex((obj) => obj.id === webSocketOrder.id);

    if (index === -1) {
        orderArr.push(webSocketOrder);
    } else {
        orderArr[index] = webSocketOrder;
    }
nfg76nw0

nfg76nw02#

如果您要替换顺序(不将数组视为不可变),则可以使用splice

const index = orderArr.findIndex((obj) => obj.id === webSocketOrder.id);

orderArr.splice(index > -1 ? index : orderArr.length, index > -1 ? 1 : 0, webSocketOrder);

相关问题