开发者问题收集

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

2020-04-08
49

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

,我想检查这些值==阿拉伯语值是否 返回他的键

示例

对象

632339504

数组

448170655

因此,在调用了助手功能之后,我做出了结果,应该是

987100224

以下是我尝试的助手功能

389238427

我致电

692273049

,但它行不通,它返回未定义的

2个回答

您的代码无法正常工作,因为:

let name = arr.map(item => item);

返回一个数组,而

.find(key => object[key] === name);

您尝试将字符串与数组进行比较,但结果始终为 false。

此外,您使用了 .find() 方法,该方法仅返回所提供数组中 第一个 元素的值。您需要使用 .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
palaѕн
2020-04-08

您可以减少对象的条目,下面是示例:

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);
Titus
2020-04-08