我有一个包含英文键和阿拉伯语值的对象,
,我要检查这些值是否==阿拉伯值 返回他的密钥
样本
对象
service: {
Plumber: 'سباكة',
Electricity: 'الكهرباء',
Dyeing: 'دهانات',
Satellite: 'تلفاز ستالايت',
Cleaning: 'التنظيف',
Air: 'المكيفات',
},
数组
['التنظيف','سباكة']
所以在调用辅助函数之后,我得出的结果应该是这样
['Plumber','Cleaning'] // in english
这是我尝试过的辅助功能
_getKeyByValue = (object, arr) => {
console.log('engKeys', Object.keys(object)); // eng keys
let name = arr.map(item => item); // "arr values"
return Object.keys(object).find(key => object[key] === name);
};
这是我的电话方式
let serv = this._getKeyByValue(englishObject, arrabicArray);
console.log(serv);
但不起作用,它返回未定义的
答案 0 :(得分:1)
您可以减少对象的条目,这是一个示例:
const service = {
Plumber: 'سباكة',
Electricity: 'الكهرباء',
Dyeing: 'دهانات',
Satellite: 'تلفاز ستالايت',
Cleaning: 'التنظيف',
Air: 'المكيفات',
};
const arr = ['التنظيف', 'سباكة'];
const result = Object.entries(service).reduce((a, [key, value]) => {
if (arr.includes(value)) {
a.push(key);
}
return a;
}, []);
console.log(result);
要处理重复项,可以在找到匹配项时清除arr
中的值:
const service = {
Plumber: 'سباكة',
Electricity: 'الكهرباء',
Dyeing: 'دهانات',
Satellite: 'تلفاز ستالايت',
Cleaning: 'التنظيف',
Air: 'المكيفات',
Duplicate: 'سباكة',
};
let arr = ['التنظيف', 'سباكة'];
const result = Object.entries(service).reduce((a, [key, value]) => {
if (arr.includes(value)) {
arr = arr.filter(v => v !== value);
a.push(key);
}
return a;
}, []);
console.log(result);
答案 1 :(得分:1)
您的代码无效,原因是:
let name = arr.map(item => item);
返回数组并在内部
.find(key => object[key] === name);
您正在尝试将字符串与始终为假的数组进行比较。
此外,您正在使用.find()
方法,该方法仅返回提供的数组中 first 元素的值。您需要使用.filter()
方法来返回基于arrabicArray
的所有匹配项。
工作演示:
const englishObject = {
Plumber: 'سباكة',
Electricity: 'الكهرباء',
Dyeing: 'دهانات',
Satellite: 'تلفاز ستالايت',
Cleaning: 'التنظيف',
Air: 'المكيفات',
};
const arrabicArray = ['التنظيف', 'سباكة'];
const _getKeyByValue = (object, arr) => {
return Object.keys(object).filter(key => arr.includes(object[key]));
};
let serv = _getKeyByValue(englishObject, arrabicArray);
console.log(serv);
//['Plumber','Cleaning'] // in english