使用非对称数据修改数组
Modifying array with asycronus data
我有一个非常奇怪的问题,我相信世界上有人已经解决了。不过,让我们保持简单。好的,开始吧。
所以我有一个简单的对象数组。现在假设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!');
});
相关文章:
- JavaScript:如何在迭代过程中修改数组中的值
- Emscripten:调用修改数组元素的 C 函数
- 在循环时修改数组是否安全
- 无法通过在节点.js中切片来修改数组
- JavaScript/AngularJS修改数组中的属性
- 使用非对称数据修改数组
- 迭代时修改数组
- Javascript函数不修改数组(引用?)
- 如何修改数组中对象的属性
- 如何使用回溯递归修改数组元素
- 使用$.grep()修改数组
- 如何在Javascript中修改数组的内容
- 修改数组原型会导致foreach的行为不同
- 如何将字符串拆分为数组,修改数组然后应用于javascript中的字符串
- 修改数组对象的值
- 修改数组.forEach自动将上下文设置为调用者
- 修改数组中的每个单词
- Javascript修改数组对象属性
- 如何修改数组中的对象,然后返回该数组的新版本
- 修改数组字符串的值