在主干网中过滤的 ID 数组上使用 .set
Using .set on a filtered array of IDs in backbone
我使用了Underscore.js的_.filter
来获取一个对象ID数组,如下所示:
var downstreamMeters = _.filter(that.collection.models, function(item) { return item.get("isdownstreammeter"); });
现在我想设置数组中每个模型的特定属性。我认为这样做是有意义的:
for (var i = 0; i < downstreamMeters.length; i++) {
var sum = 0;
inputMeters = downstreamMeters[i].get("inputmeters");
for (var i = 0; i < inputMeters.length; i++) {
var flow = parseFloat(that.collection.get(inputMeters[i]).get("adjustedflow"));
sum += flow;
}
downstreamMeters[i].set({incrementalflow: sum});
}
但是,我收到错误:
Uncaught TypeError: Cannot call method 'set' of undefined
我检查了downstreamMeters
数组,它包含正确的对象。我需要做什么来为数组中的每个模型设置属性?
说for(var i = 0; ...)
有点误导。JavaScript 将所有var
声明提升到最接近的作用域的顶部,并且for
循环不会创建自己的作用域。结果是:
for (var i = 0; i < downstreamMeters.length; i++) {
var sum = 0;
inputMeters = downstreamMeters[i].get("inputmeters");
for (var i = 0; i < inputMeters.length; i++) {
var flow = parseFloat(that.collection.get(inputMeters[i]).get("adjustedflow"));
sum += flow;
}
downstreamMeters[i].set({incrementalflow: sum});
}
同这个:
var i, sum, flow;
for (i = 0; i < downstreamMeters.length; i++) {
sum = 0;
inputMeters = downstreamMeters[i].get("inputmeters");
for (i = 0; i < inputMeters.length; i++) {
flow = parseFloat(that.collection.get(inputMeters[i]).get("adjustedflow"));
sum += flow;
}
downstreamMeters[i].set({incrementalflow: sum});
}
现在您可以看到您在外部和内部循环中使用完全相同的i
。在第一次运行循环时,当您说downstreamMeters[i].set(...)
时,i
会inputMeters.length
。显然,inputMeters.length > downstreamMeters.length
,所以你最终跑掉了downstreamMeters
的尽头;如果您尝试访问数组中超过数组末尾的元素,则会得到undefined
并且有您的
不能调用未定义的方法"set"。
错误。
嵌套循环很好,但您应该使用不同的变量:
var i, j, sum, inputMeters;
for (i = 0; i < downstreamMeters.length; i++) {
sum = 0;
inputMeters = downstreamMeters[i].get("inputmeters");
for (j = 0; j < inputMeters.length; j++)
sum += parseFloat(that.collection.get(inputMeters[j]).get("adjustedflow"));
downstreamMeters[i].set({incrementalflow: sum});
}
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 在主干网中过滤的 ID 数组上使用 .set
- 是否可以在 ES6 Set 实例上使用数组迭代方法
- Angularjs 如何将 json 属性(Set 或数组)绑定到动态输入表单
- 使用Set间隔在Jquery中迭代PHP数组
- 获取TypeError: Cannot set property '0'尝试向数组添加时未定义的
- 获取具有特定键的对象数组中的所有值(set::extract cakephp等价)
- 数组读取,然后停止-错误:Cannot set property '0'的定义
- 我可以/应该通过数组调用firebaseRef.set吗
- jQuery:set'选择'如果值在数组中,则标记在选项中