使用非对称数据修改数组

Modifying array with asycronus data

本文关键字:修改 数组 数据 非对称      更新时间:2023-09-26

我有一个非常奇怪的问题,我相信世界上有人已经解决了。不过,让我们保持简单。好的,开始吧。

所以我有一个简单的对象数组。现在假设5个对象。

[{id: 1, data: 'stuff'}, {id: 2, data: 'stuff'}, {id: 3, data: 'stuff'}, {id: 4, data: 'stuff'}, {id: 5, data: 'stuff'}]

然后我要做的是发出3个ajax请求,很明显,这些请求都会在不同的时间返回。我想做的是根据id更新这个数组。例如,我发送3个ajax请求,并接收对象1、2和4的新数据。我需要更新数组中相应对象的数据属性。我正在使用Array.splice进行更新。我发现,由于数据在不同的时间到来,有时情况下,事情没有正确更新。我认为这是因为splice所做的实际上是从数组中删除对象,然后重新插入新数组。在某些情况下,拼接方法似乎正在删除一个对象,然后另一个响应进入并试图删除另一个对象。但是,该对象不在正确的索引中,因为第一个对象已被删除,尚未插入。因此更新关闭。

根本没有必要更改数组,您只是在尝试更新数组中的对象。此外,索引应该无关紧要,因为您使用id属性来唯一标识每个对象,而不是数组中的索引。

您应该使用对您来说最简单的方法来循环遍历数组,找到具有相应id的对象并更新它。

这可以通过在每个对象上循环并保留对该对象的引用来轻松处理,这样您就可以在每个请求完成时更新每个对象。

var promiseArr = dataArr.map(function (obj) {
    return $http.get('/data/' + obj.id).then(function (result) {
        obj.data = result.data;
    });
});
// optional...
$q.all(promiseArr).then(function () {
    console.log('all done!');
});