首页 > 解决方案 > 如何在对象/数组中链接?

问题描述

我想在同一个 .js 文件中将用户与他们的父母/子女/配偶联系起来

那么,我如何在对象内“链接”。让我们说:

const users = {
  bradpitt: {
    name: "Brad",
    lastname: "Pitt",
    spouses: [{
      angelinajolie
    }]
  },
  angelinajolie: {
    name: "Angelina",
    lastname: "Jolie",
    parents: [{
      jonvoight
    }]
  }
  jonvoight: {
    name: "Jon"
  }
}

所以我可以这样使用它:

getParents() {
  for (const u of users) {
    return u.parents.name
  }
}

结果:乔恩

标签: javascriptarraysjsonobject

解决方案


您走在正确的道路上,但缺少一些关键功能:

看看这个片段中的评论!

主要问题是您在定义对象之前将对象分配angelinajolie给该对象。一种更简单、更安全的方法是使用,因为名称不是唯一的。我在我的例子中使用了这个:bradpittangelinejolieid's

同样对于属性,您使用for...in循环,您需要检查该属性是否可用。如果u.parentsundefined它会抛出一个错误。

我已将唯一名称更改为使用字符串id和六位数字构建的 ID 号。id00000. 在 users 对象中,我只是指没有前导零和 id 的用户。getParents在我使用过的函数中重建它String.prototype.padStart。它将零填充到字符串的左侧,直到达到 6 个字符。

"id"+(p.toString().padStart(6, '0'));

const users = {
  id000001 : {
    name: "Brad",
    lastname: "Pitt",
    spouses: [
      1
    ]
  },
  id000002 : {
    name: "Angelina",
    lastname: "Jolie",
    parents: [
      3 
    ]
  }, //fixed a missing comma here
  id000003: {
    name: "Jon"
  }
}


function getParents() {
  //define a return object
  //return parents per set of users
  const parents = {};
  //iterate over every user
  for (key in users) {
    const u = users[key];
    //if the user has parents go on
    if (u.parents)
    {
      //save the parents to parent object with the user as key:
      //use map to iterate over every parent and return the name of the parent
      parents[key] = u.parents.map((p) => users["id"+(p.toString().padStart(6, '0'))].name);
    }
  };
  //return the parents object
  return parents;
}

//log to console to show results:
console.log(getParents());


推荐阅读