Javascript对象:如何使用值返回属性?

用户名

给定一个Javascript对象,我想知道是否有一种使用值返回对应属性的方法?我知道属性必须是唯一的,但值可以重复。那么也许是一种使用值返回第一个匹配属性的方法吗?

var x = { a: 1, b: 2, c: 3, d: 4, e: 4 };

想要使用值4来访问属性d

更新:感谢您的有用回复。我刚刚意识到我的问题可能不是一个好问题,因为对象(来自Javascript)或哈希(来自Ruby)实际上是一个无序列表,因此要求“首次匹配”并不是一件容易的事。

TJ人群

那么也许是一种使用值返回第一个匹配属性的方法吗?

您进入了一个新领域:对象属性自ES2015开始仅具有已定义的顺序,然后仅与某些操作有关 ES2020更改使该顺序甚至与以前被豁免的旧操作也相关)

在这种情况下,由于这些属性不适合数组索引的定义,并且它们都是“自有”属性(不是继承的),因此根据它们的创建时间来排序在对象文字(如您的问题中的对象)中,属性是按源代码顺序创建的,因此,a属性是第一个,e属性是最后一个。

但是同样,此顺序仅适用于某些操作。无论是for-in也不是Object.keys,比如,保证遵循这一顺序。 (看上面)

但是Object.getOwnPropertyNames是。因此,要找到第一个匹配属性,我们可以使用Object.getOwnPropertyNames获取一个数组,然后获取其值与目标(4相匹配的第一个属性

function getFirstMatching(obj, value) {
  let result;
  Object.getOwnPropertyNames(obj).some(key => {
    if (obj[key] === value) {
      result = key;
      return true; // Stops the loop
    }
  });
  return result;
}
const x = {a: 1, b: 2, c: 3, d: 4, e: 4};
console.log(getFirstMatching(x, 4)); // d

请注意,我在其中使用了其他一些ES2015功能(letconst箭头功能)。由于无法对属性顺序进行填充/填充,因此在非ES2015环境中不能依赖它,因此...

请注意以下几点:

  1. 需要一个能够正确支持ES2015属性顺序(无法可靠地进行填充/填充)的JavaScript引擎。
  2. 属性顺序仅受某些操作(getOwnPropertynames是其中之一)的尊重
  3. 看起来像数组索引的属性名称不按创建顺序保留(在其他属性之前按数字顺序保留)。
  4. 继承的属性显示在自己的属性之后。

注意事项很重要。例如,在这里我们得到e,而不是d

function getFirstMatching(obj, value) {
  let result;
  Object.getOwnPropertyNames(obj).some(key => {
    if (obj[key] === value) {
      result = key;
      return true; // Stops the loop
    }
  });
  return result;
}
// Note that now e is first
const x = {a: 1, b: 2, c: 3, e: 4, d: 4};
console.log(getFirstMatching(x, 4)); // e

在这里我们得到q

function getFirstMatching(obj, value) {
  var result;
  Object.getOwnPropertyNames(obj).some(key => {
    if (obj[key] === value) {
      result = key;
      return true; // Stops the loop
    }
  });
  return result;
}
// Note that now e is first
const x = {i: 1, j: 2, k: 3, q: 4};
const y = {a: 1, b: 2, c: 3, d: 4, e: 4};
for (let key in y) {
  x[key] = y[key];
}
console.log(getFirstMatching(x, 4)); // q

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用JavaScript获取对象的属性值

如何使用javascript访问从函数返回的对象的属性?

javascript返回对象的属性和值对

空对象仍如何返回其属性值?

如何使用javascript从JSON返回的对象中提取特定值?

如何使用 javascript for in 语句评估对象的值并以格式返回

如何使用javascript增加对象属性的值?

Javascript 从 Javascript 对象属性返回不正确的值

如何使用测量对象属性返回全名

如何从javascript中的对象值返回键?

如何遍历并返回javascript对象的值?

如何设置 JavaScript 对象的属性值?

如何从对象数组中删除重复值并使用 JavaScript 更新对象属性

连接对象属性的值将返回NaN(Javascript)

javascript根据条件从对象的嵌套数组返回属性值

用于返回Javascript对象深处的属性值的方法的比较

用于搜索对象属性和返回值的javascript函数

如何使用函数显示对象的属性值

根据属性返回对象值

如何遍历所有属性并将值作为对象返回

如何通过单个属性的值从数组返回对象

如何查询Firebase返回属性值等于A或B的对象?

如何从返回对象的函数中获取属性的值?

如何返回基于属性值排序的类对象列表

如何从对象列表中返回属性值列表

如何从Javascript对象的属性路径中查找对象值

Javascript:如何为对象数组中的对象属性设置值?

使用过滤器返回对象中的属性值

如何使用对象重用JavaScript函数属性