如何从容器对象中过滤非空对象?
How to filter not null objects from a container object?
我有一个问题,我一般不使用键,但我现在遇到了这个问题,我有一个这样的对象:
let A = {
'a': null;
'b': null,
'c': null,
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
}
我想过滤这个对象并抛出空值,我想要这样的结果:
{
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
}
我无法一一验证,因为键是动态的,我不能在一个对象上使用map或for
我正在尝试将其转换为数组,以便之后可以使用过滤方法,但没有成功:
console.log(
pipe(
toPairs,
map(
([id, props]) => ({
id,
...props,
}),
A,
),
),
);
有什么帮助吗?
这都是动态的,你要找的。希望这对您有所帮助!
let A = {
'a': null,
'b': null,
'c': null,
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
};
var res = {};
Object.keys(A).forEach(key => {
if(A[key]!==null){
res[key]=A[key];
}
})
console.log(res);
将 R.reject() 与 R.equals(null) 或 R.isNil 一起使用(如果您也不关心 undefined
值):
const { reject, equals } = R
const fn = reject(equals(null)) // use R.isNil instead of R.equals if you don't care about undefined values as well
const obj = {"a":null,"b":null,"c":null,"d":{"isOk":"Yes"},"e":{"isOk":"No"},"f":{"label":"field"}}
const result = fn(obj)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
使用 vanilla JS,您可以使用与 Object.entries()
相同的想法来转换为 [key, value] 对,过滤这些对并删除具有 null
值的对,然后转换回使用 Object.fromEntries()
:
的对象
const fn = onj => Object.fromEntries(
Object.entries(obj)
.filter(([, v]) => v !== null)
)
const obj = {"a":null,"b":null,"c":null,"d":{"isOk":"Yes"},"e":{"isOk":"No"},"f":{"label":"field"}}
const result = fn(obj)
console.log(result)
Ramda 有一个函数 filter
用于通过谓词过滤对象或数组,它的对应函数只保留那些 不 匹配谓词的元素,reject
.
它还有一个谓词isNil
来检查一个值是null
还是undefined
。
我们可以将它们放在一起编写 reject (isNil)
以获得满足您要求的功能:
let A = {a: null, b: null, c: null, d: {isOk: 'Yes'}, e: {isOk: 'No'}, f: { label : 'field'}}
console .log (reject (isNil) (A))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
<script> const {reject, isNil } = R </script>
您可以使用 Object.keys() 方法从对象中获取键数组,然后遍历对象。
let A = {
'a': null,
'b': null,
'c': null,
'd': { isOk: 'Yes' },
'e': { isOk: 'No' },
'f': { label: 'field' }
}
let keysArr = Object.keys(A);
keysArr.map(key => {
if (A[key] == null)
delete A[key]
})
console.log(A)
我有一个问题,我一般不使用键,但我现在遇到了这个问题,我有一个这样的对象:
let A = {
'a': null;
'b': null,
'c': null,
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
}
我想过滤这个对象并抛出空值,我想要这样的结果:
{
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
}
我无法一一验证,因为键是动态的,我不能在一个对象上使用map或for
我正在尝试将其转换为数组,以便之后可以使用过滤方法,但没有成功:
console.log(
pipe(
toPairs,
map(
([id, props]) => ({
id,
...props,
}),
A,
),
),
);
有什么帮助吗?
这都是动态的,你要找的。希望这对您有所帮助!
let A = {
'a': null,
'b': null,
'c': null,
'd': { isOk : 'Yes' },
'e': { isOk : 'No' },
'f': { label : 'field'}
};
var res = {};
Object.keys(A).forEach(key => {
if(A[key]!==null){
res[key]=A[key];
}
})
console.log(res);
将 R.reject() 与 R.equals(null) 或 R.isNil 一起使用(如果您也不关心 undefined
值):
const { reject, equals } = R
const fn = reject(equals(null)) // use R.isNil instead of R.equals if you don't care about undefined values as well
const obj = {"a":null,"b":null,"c":null,"d":{"isOk":"Yes"},"e":{"isOk":"No"},"f":{"label":"field"}}
const result = fn(obj)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
使用 vanilla JS,您可以使用与 Object.entries()
相同的想法来转换为 [key, value] 对,过滤这些对并删除具有 null
值的对,然后转换回使用 Object.fromEntries()
:
const fn = onj => Object.fromEntries(
Object.entries(obj)
.filter(([, v]) => v !== null)
)
const obj = {"a":null,"b":null,"c":null,"d":{"isOk":"Yes"},"e":{"isOk":"No"},"f":{"label":"field"}}
const result = fn(obj)
console.log(result)
Ramda 有一个函数 filter
用于通过谓词过滤对象或数组,它的对应函数只保留那些 不 匹配谓词的元素,reject
.
它还有一个谓词isNil
来检查一个值是null
还是undefined
。
我们可以将它们放在一起编写 reject (isNil)
以获得满足您要求的功能:
let A = {a: null, b: null, c: null, d: {isOk: 'Yes'}, e: {isOk: 'No'}, f: { label : 'field'}}
console .log (reject (isNil) (A))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
<script> const {reject, isNil } = R </script>
您可以使用 Object.keys() 方法从对象中获取键数组,然后遍历对象。
let A = {
'a': null,
'b': null,
'c': null,
'd': { isOk: 'Yes' },
'e': { isOk: 'No' },
'f': { label: 'field' }
}
let keysArr = Object.keys(A);
keysArr.map(key => {
if (A[key] == null)
delete A[key]
})
console.log(A)