如何根据数组名称获取键值?

时间:2020-04-08 10:53:49

标签: javascript reactjs

我有一个包含英文键和阿拉伯语值的对象,

,我要检查这些值是否==阿拉伯值 返回他的密钥

样本

对象

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);

但不起作用,它返回未定义的

2 个答案:

答案 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