如何从对象的属性值中获取对象的名称?

jq6vz3qz  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(370)

我有这样的物体:

const obj1 = {name:"John", id:"0"};
const obj2 = {name:"James", id:"1"};
const obj3 = {name:"Jessica", id:"2"};

是否可以从属性值获取对象的名称?例如,我有它的id,想知道它属于哪个对象,所以“1”会给我“obj2”

kadbb459

kadbb4591#

对象没有名称,并且多个变量或属性可以引用同一对象。因此,在一般情况下,不,您无法通过对象属性找到包含对象的“the”变量,因为可能有多个变量(并且没有找到它们的好方法)。
如果将这些对象放在数组中,则可以轻松找到具有 id = "1" :

const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];
// To find it:
const result1 = objects.find(object => object.id === "1");
console.log(result1);
// Or more generally:
function findById(array, id) {
    return array.find(object => object.id === id);
}
const result2 = findById(objects, "1");
console.log(result2);
``` `find` 循环调用回调函数的数组,并返回回调函数返回的第一个对象的truthy值(或) `undefined` 如果回调从未返回真实值)(当然,可能不止一个,但是 `find` 只返回第一个。)
“”“truthy value”-javascript的概念是将值转换为 `true` 或 `false` 在需要布尔值的地方使用时,转换为 `true` 被称为“真实的”,以及那些皈依 `false` 被称为“falsy”。falsy值是 `0` ,  `NaN` ,  `null` ,  `undefined` ,  `""` ,当然 `false` (也 `document.all` 在浏览器上,由于复杂的历史原因)。所有其他价值观都是真实的。
pjngdqdw

pjngdqdw2#

您可以将它们放置在一个数组中,然后在该数组上迭代搜索所需的字段。

x4shl7ld

x4shl7ld3#

你为什么不把你的对象做成一个数组,然后搜索你想要的索引呢?
仅举几个例子,假设您的对象如下所示:

const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];
``` `<Array>.find()` ```
objects.find((e) => e.id === "1");
const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];

const result = objects.find((e) => e.id === "1");
console.log(result);
``` `<Array>.filter()` ```
objects.filter((e) => e.id === "1")[0];
const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];

const result = objects.filter((e) => e.id === "1")[0];
console.log(result);
``` `<Array>.reduce()` ```
objects.reduce((acc, curr) => (curr.id === "1") ? curr : acc);
const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];

const result = objects.reduce((acc, curr) => (curr.id === "1") ? curr : acc);
console.log(result);
``` `<Array>.some()` ```
let result;
objects.some((e) => e.id === "1" && (result = e));
const objects = [
    {name:"John", id:"0"},
    {name:"James", id:"1"},
    {name:"Jessica", id:"2"},
];

let result;
objects.some((e) => e.id === "1" && (result = e));
console.log(result);

相关问题