Javascript Object получить объект по свойству - PullRequest
0 голосов
/ 02 марта 2019

У меня есть объект 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"
      }
   }
}

Допустим, мой идентификатор пользователя равен 199, как мне узнать имя другого пользователя, не зная его идентификатора?

Ответы [ 6 ]

0 голосов
/ 02 марта 2019

Вы можете использовать удалить

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)
0 голосов
/ 02 марта 2019

Вы можете получить идентификаторы с помощью Object.keys() и отфильтровать их.

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'));
0 голосов
/ 02 марта 2019

Вы можете достичь этого с помощью следующего кода.Предположим, obj является объектом, а переменная 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)
0 голосов
/ 02 марта 2019

С помощью Object.keys вы можете получить массив ключей:

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

Зная, что массив будет содержать только два элемента и «другой» ключ, вы можете использовать Array.prototype.find чтобы получить другой элемент:

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

Помните, что ключи объектов всегда являются строками, поэтому вы можете настроить фильтрацию и операции с идентификаторами так, чтобы они обрабатывались как (или приводились в) номера.

0 голосов
/ 02 марта 2019

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);
0 голосов
/ 02 марта 2019

Вы можете получить доступ к значениям, используя Object.keys, чтобы получить идентификаторы.И тогда 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);
...