我有一个像这样的数组:
const appoint =[
{ a: "asas",
b:{au: false, h:false,l:true}
},
{ a: "avd",
b:{au: true, h:false,l:true}
},
{ a: "as", b:{au: true, h:false,l:false}
}];
当我访问b时,我想过滤伪造的值,到目前为止,我对诸如此类的map()系列还没有成功实现:
const result = appoint.map(elem => elem.b.)
const finalresult = result.map(
item =>item.filter(
(item, value)=> item[value] === false )
)
答案 0 :(得分:1)
elem.b是一个对象,而不是数组,因此不能在其上使用过滤器。您可以执行以下操作:
const bArray = appoint.map(elem => elem.b)
const finalresult = bArray.map(b => {
bKeys = Object.keys(b)
const filtered = {}
bKeys.forEach(key => {
if (!b[key]) filtered[key] = false
})
return filtered
})
答案 1 :(得分:1)
您可以创建一个function function0(sizevar) {
s = sizevar * 2;
return function function1() {
console.log(s);
console.log(sizevar);
};
}
var size12 = function0(12);
var size14 = function0(14);
size12()
size14()
函数,该函数接受一个对象和一个谓词,并返回通过谓词检查的键。
现在,您可以将getKeysBy()
与Array.flatMap()
结合使用,以获取所有键的数组。
getKeysBy()
答案 2 :(得分:1)
您可以首先使用map
获取仅包含b
的新数组,然后使用reduce
并在内部reduce回调中使用for..in
来迭代对象并获取正确的键
const appoint = [{
a: "asas",
b: {
au: false,
h: false,
l: true
}
},
{
a: "avd",
b: {
au: true,
h: false,
l: true
}
},
{
a: "as",
b: {
au: true,
h: false,
l: false
}
}
];
let filtered = appoint.map(function(item) {
return item.b;
}).reduce(function(acc, curr) {
for (let keys in curr) {
if (curr[keys]) {
acc.push(keys)
}
}
return acc;
}, []);
console.log(filtered)
答案 3 :(得分:0)
您可以这样做
let array = [{
a: "asas",
b: {
au: false,
h: false,
l: true
}
}, {
a: "avd",
b: {
au: true,
h: false,
l: true
}
}, {
a: "as",
b: {
au: true,
h: false,
l: false
}
}, {
a: "ab",
b: {
au: false,
h: false,
l: false
}
}]
let output = array.filter((element) => {
let keys = Object.keys(element.b)
element.b = keys.filter((key) => {
if (element.b[key]) {
return key
}
})
if (!Object.keys(element.b).length) {
element.b = []
}
return element;
})
console.log(output)
这会给你
[
{
"a": "asas",
"b": [
"l"
]
},
{
"a": "avd",
"b": [
"au",
"l"
]
},
{
"a": "as",
"b": [
"au"
]
},
{
"a": "ab",
"b": []
}
]
如果所有值都不为真,我假设您可能需要一个空数组。