Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JS对象中查找重复或错误的值-Javascript_Javascript_Arrays_Lodash - Fatal编程技术网

在JS对象中查找重复或错误的值-Javascript

在JS对象中查找重复或错误的值-Javascript,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有一个对象,其中可以包含重复值和/或伪值。我想在此基础上组成一个对象数组,并在检查不区分大小写的值的基础上添加一个新的布尔属性 这就是我所拥有的: const obj={ a:‘a’, b:‘b’, c:‘c’, d:‘c’, e:‘e’, f:' } log(Object.keys(obj.map)(i=>{ 返回{ 关键:我,, isDuplicateOrFalsy:u.过滤器( 对象值(obj), j=> _.trimEnd(u.toLower(j))=== _特里门德先生( _托洛尔

我有一个对象,其中可以包含重复值和/或伪值。我想在此基础上组成一个对象数组,并在检查不区分大小写的值的基础上添加一个新的布尔属性

这就是我所拥有的:

const obj={
a:‘a’,
b:‘b’,
c:‘c’,
d:‘c’,
e:‘e’,
f:'
}
log(Object.keys(obj.map)(i=>{
返回{
关键:我,,
isDuplicateOrFalsy:u.过滤器(
对象值(obj),
j=>
_.trimEnd(u.toLower(j))===
_特里门德先生(
_托洛尔先生(
obj[i]
)
)
).长度>1||
!!(
对象值(obj),
布尔值
)
}
}))

您可以执行类似的操作:

const obj={a:'a',b:'b',c:'c',d:'c',e:'e',f:'';
const res=对象条目(obj)
.map(([key,val],i,arr)=>({
钥匙
isDuplicateOrFalsy:!val||
arr.some([k,v],j)=>
j!==i&v.toLowerCase().trim()==val.toLowerCase().trim()
)
}));

控制台日志(res)使用
..toPairs()
将对象转换为
[键,值]
的条目,并按值的小写版本对它们进行分组。平面映射组,并将组中的每个条目映射回一个对象。组中长度大于1的任何项都是重复项。合并对象,并使用
\uUat()
按正确顺序获取项目:

const fn=obj=>(
_.merge(….平面图)(
_.groupBy(u.toPairs(obj),([,v])=>uu.lowerCase(v)),
group=>group.map(([key,v])=>({[key]:{
钥匙
isDuplicateOrFalsy:group.length>1 | | | isEmpty(| trim(v))
}}))
)),
_.钥匙(obj)
)
常量obj={“a”:“a”,“b”:“b”,“c”:“c”,“d”:“c”,“e”:“e”,“f”:“g”:“c”}
常数结果=fn(obj)
console.log(结果)

解决方案不包含不必要的周期:

const obj={
a:‘a’,
b:‘b’,
c:‘c’,
d:‘C’,
e:‘e’,
f:'
}
//生成数组[[键,值],…]并按值排序
values=Object.entries(obj.sort)((a,b)=>a[1]>b[1])
结果=值.map((e,i,arr)=>{
常数[键,值]=e;
const last=values.length-1;//最后一个索引
让IsDuplicator Falsy=假;
//真实条件=双磷酸盐接近
如果(!value)IsDuplicatorFalsy=true;//falsy检查
如果中间为(i>0&&i
const obj={
a:‘a’,
b:‘b’,
c:‘c’,
d:‘c’,
e:‘e’,
f:'
};
常量IsDuplicator FalsyByValue=对象
.价值观(obj)
.减少(
(结果、值)=>{
const caseinsensitivevalue=value.toLowerCase();
结果[CaseSenseTiveValue]=结果[CaseSenseTiveValue]==未定义
/*
*如果'caseInsensetiveValue'是假值,
然后将'isDuplicator Falsy'设置为'true'`
*否则,将其设置为“false”`
*/
?!CaseInsensitiveValue
/*
*如果结果[caseInsensetiveValue]为'true'(我们有一个falsy值),
那么这个“真的”就不会有什么坏处了
*否则,我们在这一点上有一个副本
也应该设置为'true'。
*/
:正确;
返回结果;
},
{},
);
const keys with replicationorfalsyinfo=对象
.条目(obj)
.减少(
(结果,[键,值]=>[
…结果,
{
isDuplicateOrFalsy:isDuplicateOrFalsyByValue[value.toLowerCase()],
钥匙
},
],
[],
);
log('keyswithreplicationorfalsyinfo');

console.log(带有replicationorfalsyinfo的键)一个简短的、更具可读性的代码

const obj={
a:‘a’,
b:‘b’,
c:‘c’,
d:‘c’,
e:‘e’,
f:'
}
//对象映射每个值的出现次数。{a:1,b:1,c:2,d:1}
const valuesOccurance=u.mapValues(u.groupBy(obj,u.lowerCase),ocurrances=>ocurrances.length);
//用于检查副本的函数
const isDuplicate=value=>valuesOccurance[u.lowerCase(value)]>1;
//用于检查falsy值的函数
const isFalsy=value=>!价值
常量结果=\映射(对象,(值,键)=>{
返回{
isDuplicate或Falsy:isFalsy(值)| | isDuplicate(值),
钥匙
};
});
console.log({result})

f的值应该为真…谢谢,我添加了条件