Javascript 对象通过 属性 获取对象

Javascript Object get object by property

我有一个包含 2 个用户的对象,如下所示。该对象将只包含 2 个用户。

{
   "71":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:05:19Z",
      "customData":"__vue_devtool_undefined__",
      "id":"71",
      "name":"Angeline Fadel",
      "updatedAt":"2018-10-13T16:05:19Z",
      "presenceStore":{
         "71":"online"
      }
   },
   "199":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:06:13Z",
      "customData":"__vue_devtool_undefined__",
      "id":"199",
      "name":"Rodrigo Schuster",
      "updatedAt":"2018-10-13T16:06:13Z",
      "presenceStore":{
         "71":"online"
      }
   }
}

假设我的用户 ID 是 199,如何在不知道用户 ID 的情况下获取其他用户的名称?

您可以使用 Object.keys to get ids. And then filter() 访问这些值以获取其他用户

let users = {
  '71':{name:"First User"},
  '199':{name:"Second User"}
}
let id = '199'
let otherId = Object.keys(users).filter(key => key !== id)[0]
console.log(users[otherId].name);

var obj={
  199: {
    name: "abc"
  },
  71: {
    name: "def"
  }
}

var knownKey = 199;
var otherKey = Object.keys(obj).filter(key => key != knownKey).pop();
console.log("name = " + obj[otherKey].name);

使用Object.keys,可以得到一个key数组:

const users = { 199: {...}, 71: {...} };
const ids = Object.keys(users); // -> ['199', '71']

知道数组将只包含两项和 "other" 键,您可以使用 Array.prototype.find 获取另一项:

const myId = '199';
const targetId = ids.find(id => id !== myId); // -> '71'

请记住,对象键始终是字符串,因此您可能希望以将 ID 视为(或强制转换为)数字的方式调整对 ID 的过滤和操作。

您可以通过以下代码实现。假设 obj 是对象,id 变量存储 id。现在,使用 Object.keys 获取键(即数组)并根据 !== id 筛选出结果。使用 otherId 获取相关对象和名称。

obj = {
   "71":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:05:19Z",
      "customData":"__vue_devtool_undefined__",
      "id":"71",
      "name":"Angeline Fadel",
      "updatedAt":"2018-10-13T16:05:19Z",
      "presenceStore":{
         "71":"online"
      }
   },
   "199":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:06:13Z",
      "customData":"__vue_devtool_undefined__",
      "id":"199",
      "name":"Rodrigo Schuster",
      "updatedAt":"2018-10-13T16:06:13Z",
      "presenceStore":{
         "71":"online"
      }
   }
}
id = "199"
otherId = Object.keys(obj).find(data => data !== id)
result = obj[otherId].name
alert(result)

您可以使用 Object.keys() 获取 ID 并过滤它们。

const usrs = {
  '1': {
    name: 'a'
  },
  '2': {
    name: 'b'
  }
};

function other(usrs, id) {
  const allId = Object.keys(usrs);
  console.log('allId:', allId);
  const otherId = allId.filter(k => k !== id);
  console.log('otherId:', otherId);
  const otherUser = otherId.map(uid => usrs[uid]);
  console.log('otherUser:', otherUser);
  const otherNames = otherUser.map(u => u.name);
  return otherNames
}

console.log(other(usrs, '1'));

你可以使用 delete

const users = {
   "71":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:05:19Z",
      "customData":"__vue_devtool_undefined__",
      "id":"71",
      "name":"Angeline Fadel",
      "updatedAt":"2018-10-13T16:05:19Z",
      "presenceStore":{
         "71":"online"
      }
   },
   "199":{
      "avatarURL":"__vue_devtool_undefined__",
      "createdAt":"2018-10-13T16:06:13Z",
      "customData":"__vue_devtool_undefined__",
      "id":"199",
      "name":"Rodrigo Schuster",
      "updatedAt":"2018-10-13T16:06:13Z",
      "presenceStore":{
         "71":"online"
      }
   }
};

const knowUserId = '199';
const knowUserIndex = Object.keys(users).indexOf(knowUserId);

if(knowUserIndex > -1){
 delete users[knowUserId]; 
}

console.log(users)