Javascript/Underscore,将布尔数组转换为字符串数组
Javascript/Underscore, turn array of booleans into array of strings
所以我试图完成将布尔数组转换为字符串数组(仅设置为 true 的布尔数组)。这可以是 javascript 或下划线。让我告诉你我的意思。
我有一个这样的数组:
[{"item1" : [{"one": true, "two": false}]}, {"item2" : [{"one": false, "two": true}]}];
我要寻找的最终结果是:
[{"item1" : ["one"]}, {"item2" : ["two"]}];
值得一提的是,所有这些键都是动态的。我似乎无法弄清楚我应该如何遍历这个数组来完成这个任务。越简单越好!谢谢!
这是我糟糕的尝试:
$scope.testObject = _.map($scope.filterArray, function(obj) {
_.map(obj.values, function(value) {
if (value === true) {
return value;
}
});
});
(这不起作用)。我想要完成的是将这些对象的值(例如 [{"one":true, "two": false}] )转换为字符串数组,字符串是项目的键设置为 true。
例如
[{"one":true, "two": false}]
会变成
["one"]
因为二是假的。
此功能可让您生成所需的结果。 'For in' 对于访问对象键很有用我做了两次。可能有更优雅的方式来实现此功能。如果你给我更多的信息,我可以帮你吗?
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
arr.map(function(item){
for(key in item){
for(innerKey in item[key][0]){
if(item[key][0][innerKey]){
var obj = {};
obj[key] = [innerKey];
return obj;
}
}
}
});
JavaScript set object key by variable
与lodash:
1) 选择值为真的对象的属性:
_.pick(object, Boolean)
2) 抓取值为真对象的属性的键:(结合上面的解决方案)
_.keys(_.pick(object, Boolean))
3) 对每个 item
和 _.mapValues
执行上述操作(这就像对对象执行 Array.prototype.map
)
_.mapValues(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
function run () {
return _.map(arr, function (item) {
return _.mapValues(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
})
}
document.write('<pre>' + JSON.stringify(run(), null, 2) + '</pre>')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.6.0/lodash.min.js"></script>
更新:与underscore:
幸运的是,大多数方法都支持下划线,我唯一要做的就是将 _.mapValues
更改为 _.mapObject
(source)
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
function run () {
return _.map(arr, function (item) {
return _.mapObject(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
})
}
document.write('<pre>' + JSON.stringify(run(), null, 2) + '</pre>')
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
所以我试图完成将布尔数组转换为字符串数组(仅设置为 true 的布尔数组)。这可以是 javascript 或下划线。让我告诉你我的意思。
我有一个这样的数组:
[{"item1" : [{"one": true, "two": false}]}, {"item2" : [{"one": false, "two": true}]}];
我要寻找的最终结果是:
[{"item1" : ["one"]}, {"item2" : ["two"]}];
值得一提的是,所有这些键都是动态的。我似乎无法弄清楚我应该如何遍历这个数组来完成这个任务。越简单越好!谢谢!
这是我糟糕的尝试:
$scope.testObject = _.map($scope.filterArray, function(obj) {
_.map(obj.values, function(value) {
if (value === true) {
return value;
}
});
});
(这不起作用)。我想要完成的是将这些对象的值(例如 [{"one":true, "two": false}] )转换为字符串数组,字符串是项目的键设置为 true。
例如
[{"one":true, "two": false}]
会变成
["one"]
因为二是假的。
此功能可让您生成所需的结果。 'For in' 对于访问对象键很有用我做了两次。可能有更优雅的方式来实现此功能。如果你给我更多的信息,我可以帮你吗?
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
arr.map(function(item){
for(key in item){
for(innerKey in item[key][0]){
if(item[key][0][innerKey]){
var obj = {};
obj[key] = [innerKey];
return obj;
}
}
}
});
JavaScript set object key by variable
与lodash:
1) 选择值为真的对象的属性:
_.pick(object, Boolean)
2) 抓取值为真对象的属性的键:(结合上面的解决方案)
_.keys(_.pick(object, Boolean))
3) 对每个 item
和 _.mapValues
执行上述操作(这就像对对象执行 Array.prototype.map
)
_.mapValues(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
function run () {
return _.map(arr, function (item) {
return _.mapValues(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
})
}
document.write('<pre>' + JSON.stringify(run(), null, 2) + '</pre>')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.6.0/lodash.min.js"></script>
更新:与underscore:
幸运的是,大多数方法都支持下划线,我唯一要做的就是将 _.mapValues
更改为 _.mapObject
(source)
var arr = [{"item1" : [{"one":true, "two": false}]}, {"item2" : [{"one":false, "two": true}]}];
function run () {
return _.map(arr, function (item) {
return _.mapObject(item, function (value) {
return _.keys(_.pick(value[0], Boolean));
});
})
}
document.write('<pre>' + JSON.stringify(run(), null, 2) + '</pre>')
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>