Как получить доступ к определенным свойствам в нескольких объектах с помощью JS

0

Вот мой объект:

$scope.info = [];
$scope.info = [{"name":"kanye","size":"","folder":"Folder"},{"name":"west","size":"","folder":"Folder"}]
$scope.infoObj = $scope.info.name;
console.log($scope.infoObj);

Это вернет мне Неопределенный. Ответ должен быть следующим:

[{"name":kanye},{"name":west}]

Но как получить доступ к конкретным свойствам из нескольких объектов с помощью angularJS или jquery/js?

  • 1
    Обратите внимание, что [] означает Array , к которому обычно обращаются такие вещи, как [0] , поэтому, возможно, вам следует попробовать $scope.info[0].name
  • 0
    Я уже пробовал, но показывало только значение из info [0] .name. Пример: {"name": kanye}.
Показать ещё 1 комментарий
Теги:
object
arrays
properties

2 ответа

0
Лучший ответ

Вы можете сделать немного рефакторинга, чтобы сделать ваш код немного более чистым и читаемым. Вместо того, чтобы дважды установить значение своей info, установите его один раз и добавьте объекты в каждую строку после.

Как это:

$scope.info = [];
$scope.info.push({
  "name":"kanye",
  "size":"",
  "folder":"Folder"
});
$scope.info.push({
  "name":"west",
  "size":"",
  "folder":"Folder"
});

Посмотрите, насколько это чисто? Теперь должно быть достаточно очевидно, что info - это массив объектов, поэтому $scope.info.name не будет работать. Я бы рекомендовал создать функцию поиска, которая поможет захватить список на основе ключа, который вы ему предоставляете.

Что-то вроде этого:

function lookup(key) {
  var result = [];
  for (var i = 0; i < $scope.info.length; i++) {
    var object = {};
    object[key] = $scope.info[i][key];
    result.push(object);
  }
  return result;
}

И затем назовите это так:

$scope.infoObj = lookup('name');
console.log($scope.infoObj);
  • 0
    Спасибо, это работает. :)
3

Это должно решить проблему:

$scope.infoObj = $scope.info.map(function(obj){ 
  var x = {}; 
  x['name'] = obj['name']; 
  return x;
})

для ES6 можно упростить:

$scope.infoObj = $scope.info.map(x => ({name:x['name']}))
  • 0
    или $scope.info.map(obj=>({name: obj.name});
  • 0
    Рад видеть, что вы исправили синтаксическую ошибку Хуана. ;-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню