嵌套循环,有更好的方法吗
Nested for loops, is there a better way?
我需要在不接触原始数组的情况下,从存储在数组中的对象中删除空属性。
这是我的代码:
// first I create a copy of the array
parsedShapes = [];
for (var i in shapes) {
parsedShapes.push(shapes[i]);
}
// then for each objects in the new array, I delete all the empty attributes.
for (var i in parsedShapes) {
var objects = parsedShapes[i];
for (var j in objects) {
if (objects[j] === "") {
delete objects[j];
}
}
}
这个代码是有效的,但我想知道是否有更好的方法来处理这个操作。
谢谢。
如果你不能更改"shapes"的值,我会尝试这样的方法:
var parsedShapes = shapes.map(function(item){
var obj = {};
for(var i in item){
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
}
return obj
});
这样,你只需要在"shapes"中循环一次,而不必在"shape"中迭代来创建"parsedShapes",然后在"parsedShapes"中迭代以清除空白。
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
这将删除值"null"或"中的任何值。我假设值为"0"或"false"的内容不被视为"空"。
注意filter()只适用于一个数组。所以,如果集合中的项是对象,那么使用filter()将不起作用。
要创建数组的副本,只需执行以下操作:
var newArray = oldArray.slice(0);
除此之外,除了一开始就没有空值之外,我真的想不出任何更简单的方法来过滤掉空值。
您可能会使用filter
函数来完成此操作,例如:
var filtered = object_filter(parsedShaped, function (key, shape) {
return shape !== "";
});
过滤器类似于:
function object_filter(array) {
var result = {};
object_map(object, function (key, value) {
if (filter_function(key, value)) {
result[key] = value;
}
});
return result;
}
大多数框架都会有这样的功能。如果没有,请编写自己的:)
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 设置嵌套对象属性的更好方法
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- 有没有更好的方法将音频与视频同步(只需将其放在视频中即可)
- 调用影子原型方法的更简单/更好的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- AngularJS:有没有比指定的方法更好的方法来实现这一点
- 哪种验证方法更好
- 哪一种定义变量的方法更好?为什么?