假设有一个物体:
var obj = {
filed1: {
id: 'first',
order: 3,
rules: {
required: true,
minlength: 5
}
},
filed2: {
id: 'second',
order: 2,
rules: {
required: true
}
},
filed3: {
id: 'third',
order: 1,
}
}
我想创建一个数组,其中将包含具有id
属性的对象的required
。因此,在这种情况下,数组将为:
['first', 'second']
该怎么做?
var obj = {
filed1: {
id: 'first',
order: 3,
rules: {
required: true,
minlength: 5
}
},
filed2: {
id: 'second',
order: 2,
rules: {
required: true
}
},
filed3: {
id: 'third',
order: 1,
}
}
var arr = [];
/*for (key in obj) {
if obj.hasOwnProperty(required) {
var ids =
arr.push(ids);
}
}*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 0 :(得分:3)
使用Object.values
获取obj
的所有值。然后,您只需使用filter
和map
即可获得所需的结果。
您还可以使用reduce
在单个循环中执行此操作。
var obj = {
filed1: {
id: 'first',
order: 3,
rules: {
required: true,
minlength: 5
}
},
filed2: {
id: 'second',
order: 2,
rules: {
required: true
}
},
filed3: {
id: 'third',
order: 1,
}
};
const result = Object.values(obj)
.filter(val => (val.rules || {}).required)
.map(val => val.id);
console.log(result);
答案 1 :(得分:0)
我强烈建议塞巴斯蒂安·西蒙(Sebastian Simon)提供建议。但是,如果您正在寻找复制粘贴的东西,请使用以下功能。将您的对象作为函数参数传递。
function getRequiredIds(obj) {
var ids = [];
for (var key in obj) {
if (obj[key]["rules"] && obj[key]["rules"]["required"])
ids.push(obj[key]["id"]);
}
return ids;
}