Javascript forloop 更改为 lodash
Javascript forloop change to lodash
需要将 javascript 代码更改为 lodash
var templates = {
"category": {
"findByName": {
"method": "generic",
"settings": {
"baseURL": "some2"
}
}
},
"product": {
"findByPartNumber": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
},
"findByUniqueId": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
}
}
};
for ( var index in templates) {
var module = templates[index];
for ( var fileIndex in module) {
if (module[fileIndex].method) {
var dsSettings = module[fileIndex].settings;
console.log(dsSettings)
}
}
}
结果:
{ baseURL: 'some2' }
{ baseURL: 'some1' }
{ baseURL: 'some1' }
Lodash 代码:
_.forEach(templates, function(n, key) {
var v = _.pluck(_.filter(n), 'settings');
console.log(v);
});
结果:
[ { baseURL: 'some2' } ]
[ { baseURL: 'some1' }, { baseURL: 'some1' } ]
我正在寻找上面给出的 lodash 代码中的对象结果。请推荐
您可以使用 _.flatten
var target = [];
_.forEach(templates, function(n, key) {
target.push(_.pluck(_.filter(n), 'settings'));
});
target = _.flatten(target);
我确实喜欢这个..有没有更好的方法来解决这个问题?
_.forEach(templates, function(n) {
_.forEach(_.pluck(_.filter(n), 'settings'), function(obj) {
console.log(obj);
});
});
lodash 中的 pluck 和 filter 总是 return 数组,所以如果你 console.log 这些函数的输出你总是会得到一个数组,而不仅仅是一个对象列表。您需要遍历 v 中包含的数组和 console.log 每个值。
请注意:您为什么使用 _.filter? pluck 不应改变底层对象,因此没有理由过滤或克隆对象 n
单线怎么样:
settings = _(templates).map(_.values).flatten().pluck('settings').value()
var templates = {
"category": {
"findByName": {
"method": "generic",
"settings": {
"baseURL": "some2"
}
}
},
"product": {
"findByPartNumber": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
},
"findByUniqueId": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
}
}
};
settings = _(templates).map(_.values).flatten().pluck('settings').value()
document.write("<pre>" + JSON.stringify(settings,0,3));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>
需要将 javascript 代码更改为 lodash
var templates = {
"category": {
"findByName": {
"method": "generic",
"settings": {
"baseURL": "some2"
}
}
},
"product": {
"findByPartNumber": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
},
"findByUniqueId": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
}
}
};
for ( var index in templates) {
var module = templates[index];
for ( var fileIndex in module) {
if (module[fileIndex].method) {
var dsSettings = module[fileIndex].settings;
console.log(dsSettings)
}
}
}
结果:
{ baseURL: 'some2' }
{ baseURL: 'some1' }
{ baseURL: 'some1' }
Lodash 代码:
_.forEach(templates, function(n, key) {
var v = _.pluck(_.filter(n), 'settings');
console.log(v);
});
结果:
[ { baseURL: 'some2' } ]
[ { baseURL: 'some1' }, { baseURL: 'some1' } ]
我正在寻找上面给出的 lodash 代码中的对象结果。请推荐
您可以使用 _.flatten
var target = [];
_.forEach(templates, function(n, key) {
target.push(_.pluck(_.filter(n), 'settings'));
});
target = _.flatten(target);
我确实喜欢这个..有没有更好的方法来解决这个问题?
_.forEach(templates, function(n) {
_.forEach(_.pluck(_.filter(n), 'settings'), function(obj) {
console.log(obj);
});
});
lodash 中的 pluck 和 filter 总是 return 数组,所以如果你 console.log 这些函数的输出你总是会得到一个数组,而不仅仅是一个对象列表。您需要遍历 v 中包含的数组和 console.log 每个值。
请注意:您为什么使用 _.filter? pluck 不应改变底层对象,因此没有理由过滤或克隆对象 n
单线怎么样:
settings = _(templates).map(_.values).flatten().pluck('settings').value()
var templates = {
"category": {
"findByName": {
"method": "generic",
"settings": {
"baseURL": "some2"
}
}
},
"product": {
"findByPartNumber": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
},
"findByUniqueId": {
"method": "generic",
"settings": {
"baseURL": "some1"
}
}
}
};
settings = _(templates).map(_.values).flatten().pluck('settings').value()
document.write("<pre>" + JSON.stringify(settings,0,3));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>