gpt4 book ai didi

JavaScript 对象 : How to return property using value?

转载 作者:行者123 更新时间:2023-11-28 05:14:43 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

So perhaps a way to use value to return the first matching property?

您进入了新领域:自 ES2015 以来,对象属性仅具有定义的顺序,并且仅与某些操作相关(ES2020 中的 change 使顺序在大多数情况下,甚至与过去可以豁免的旧操作相关)。

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

但同样,此顺序仅适用于某些操作。例如,for-inObject.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

关于JavaScript 对象 : How to return property using value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com