Javascript 从对象获取布尔值
我有一个像这样的物体:Javascript 从对象获取布尔值,javascript,Javascript,我有一个像这样的物体: var packages = { SoftwareColumn: false, BatchNumberColumn : false, MatrixId : 1, CommentsColumn : true, PartNumber : "Abc123" } 上面的物体要大得多,但对于这个问题,我已经缩小了范围。如果在它上面循环并获取所有键/值,其中值为true,我将尝试实现什么。我试过了 if (packages.length > 0) { Object.
var packages = { SoftwareColumn: false, BatchNumberColumn : false, MatrixId : 1, CommentsColumn : true, PartNumber : "Abc123" }
上面的物体要大得多,但对于这个问题,我已经缩小了范围。如果在它上面循环并获取所有键/值,其中值为true
,我将尝试实现什么。我试过了
if (packages.length > 0) {
Object.keys(packages).forEach(function (key) {
//here I can't figure out how to get values which are only true and get their key
});
}
您可以使用reduce()
代替forEach()
循环并返回obj。要仅返回true
值,可以使用identity/strict equality==
运算符
var包={
软件专栏:错,
BatchNumberColumn:false,
MatrixId:1,
评论专栏:没错,
零件号:“Abc123”
}
var newObj=Object.keys(包).reduce(函数(r,e){
if(packages[e]==true)r[e]=packages[e]
返回r;
}, {})
console.log(newObj)
您可以使用reduce()
而不是forEach()
循环并返回obj。要仅返回true
值,可以使用identity/strict equality==
运算符
var包={
软件专栏:错,
BatchNumberColumn:false,
MatrixId:1,
评论专栏:没错,
零件号:“Abc123”
}
var newObj=Object.keys(包).reduce(函数(r,e){
if(packages[e]==true)r[e]=packages[e]
返回r;
}, {})
console.log(newObj)
对象没有长度属性。这意味着您将始终在if中未定义
使用将使检查密钥变得容易:
var-packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”}
var键=[];
用于(输入包){
如果(包[键]==真){
按键。按(键);
}
}
控制台日志(键)代码>对象没有长度属性。这意味着您将始终在if中未定义
使用将使检查密钥变得容易:
var-packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”}
var键=[];
用于(输入包){
如果(包[键]==真){
按键。按(键);
}
}
控制台日志(键)代码>尝试使用和。尝试使用==
也与类型匹配。添加了注释的说明
var-packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”}
var res=Object.keys(packages).filter(函数(a){//筛选真值键
返回包[a]==true//其验证的类型也是布尔值和true
}).reduce(函数(a,b){//reduce用于重新创建筛选器对象
a[b]=包[b]
归还
}, {})
console.log(res)
尝试使用和。尝试使用=
也与类型匹配。添加了注释的解释
var-packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”}
var res=Object.keys(packages).filter(函数(a){//筛选真值键
返回包[a]==true//其验证的类型也是布尔值和true
}).reduce(函数(a,b){//reduce用于重新创建筛选器对象
a[b]=包[b]
归还
}, {})
console.log(res)
您可以筛选并用于新对象
var packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”},
trueItems=对象。分配(…对象
.钥匙(套装)
.filter(k=>packages[k]==true)
.map(k=>({[k]:包[k]}))
);
console.log(trueItems)代码>您可以筛选并用于新对象
var packages={SoftwareColumn:false,BatchNumberColumn:false,MatrixId:1,CommentsColumn:true,PartNumber:“Abc123”},
trueItems=对象。分配(…对象
.钥匙(套装)
.filter(k=>packages[k]==true)
.map(k=>({[k]:包[k]}))
);
console.log(trueItems)代码>我假设,您只希望检索类型为“Boolean”的项,而不是JavaScript规则中的“truthy”。为了验证给定对象的字段是否为布尔值,我建议在对象的字段上使用'typeof'运算符或调用object.prototype.toString.call(我自己更喜欢使用第二个选项,因为它具有更好的灵活性,尽管会牺牲性能)
我假设,您只希望检索类型为“Boolean”的项,而不是JavaScript规则中的“truthy”。为了验证给定对象的字段是否为布尔值,我建议在对象的字段上使用'typeof'运算符或调用object.prototype.toString.call(我自己更喜欢使用第二个选项,因为它具有更好的灵活性,尽管会牺牲性能)
如果只需要每个键的值->返回包[key]代码>您是否还需要“真实”的键,例如布尔(“Abc1234”)=真值还是只需要实际为真的值?@SteffenSchmitz只需要实际为真的值哦。您可以先过滤它们Object.keys(packages).filter(k=>packages[k]==true).forEach(k=>console.log(packages[k])
?对象文本没有if语句中测试的length属性:packages.length>0
如果您只需要每个键的值->返回packages[key]代码>您是否还需要“真实”的键,例如布尔(“Abc1234”)=真值还是只需要实际为真的值?@SteffenSchmitz只需要实际为真的值哦。您可以先过滤它们Object.keys(packages).filter(k=>packages[k]==true).forEach(k=>console.log(packages[k])
?对象文本没有if语句中测试的length属性:packages.length>0
(请记住过滤继承的属性和方法)(请记住筛选继承的属性和方法)谢谢!我如何更改此项以仅获取值为true的键您将在reduce中使用数组作为累加器,如果值为true
则将该键推送到该数组谢谢!在这种情况下,这是perfectOr
var packages = { SoftwareColumn: false, BatchNumberColumn : false, MatrixId : 1, CommentsColumn : true, PartNumber : "Abc123" }
console.log(packages);
if (Object.keys(packages).length > 0) {
Object.keys(packages).forEach(function (key) {
if(packages[key]==true){
console.log(key);
}
});
}
let packages = { SoftwareColumn: false, BatchNumberColumn : false, MatrixId : 1, CommentsColumn : true, PartNumber : "Abc123" }
let filtered = Object.keys(packages).reduce((acc, key) => {
if(Object.prototype.toString.call(packages[key]) === '[object Boolean]' && packages[key]) {
acc[key] = packages[key];
}
return acc;
}, {});