2

У меня есть структура массива, подобная этой.AngularJS multiple Область, необходимая для автозаполнения

[ 
    { 
    "id": "1", 
    "name": "John", 
    "city": "NY" 
    }, 
    { 
    "id": "2", 
    "name": "Gerold", 
    "city": "LA" 
    }, 
    { 
    "id": "3", 
    "name": "Stuart", 
    "city": "Boston" 
    } 
] 

мне нужно $ объем, как показано ниже для моего поиска автозаполнения.

$scope.name=["john","Gerold","Stuart"]; 
$scope.city=["NY","LA","Boston"]; 

Может кто-нибудь помочь получить это с помощью регулятора угловой_js. Спасибо, заранее.

ответ

0

Вы можете использовать MAP ..

$scope.YourBigArray = [{ 
    "id": "1", 
    "name": "John", 
    "city": "NY" 
}, { 
    "id": "2", 
    "name": "Gerold", 
    "city": "LA" 
}, { 
    "id": "3", 
    "name": "Stuart", 
    "city": "Boston" 
}]; 

$scope.names = $scope.YourBigArray.map(function(object) { 
    return object.name; 
}); 
$scope.cities = $scope.YourBigArray.map(function(object) { 
    return object.city; 
}); 

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

function filterForDuplicate(things) { 
    return things.filter(function(item, pos) { 
    return things.indexOf(item) === pos; 
    }); 
} 
+0

Спасибо за ваш ответ @Rakeschand ..! Я попробую это .. !! –

1

Использование MAP

$scope.users = [ 
    { 
    "id": "1", 
    "name": "John", 
    "city": "NY" 
    }, 
{ 
    "id": "2", 
    "name": "Gerold", 
    "city": "LA" 
}, 
{ 
    "id": "3", 
    "name": "Stuart", 
    "city": "Boston" 
} 
]; 

$scope.cities = $scope.users.map(function(obj){ 

return obj.city; 
}); 

console.log($scope.cities); 
+0

Большое спасибо @sisyphus .. !! Работает..!! –

1

Вы также можете создать вспомогательную функцию, которая сделает это для вас, и вам не нужно определять карту для каждой функции, которую вы хотите, и вы делаете i т всего один проход (следовательно, только немного быстрее)

образца здесь;)

var myArray = [ 
    { 
     "id": "1", 
     "name": "John", 
     "city": "NY" 
    }, 
    { 
     "id": "2", 
     "name": "Gerold", 
     "city": "LA" 
    }, 
    { 
     "id": "3", 
     "name": "Stuart", 
     "city": "Boston" 
    } 
] 
function toScope(scopedPropertieNames, array) { 
    scopedPropertieNames.forEach(function(propertyName) { 
     if (! $scope[propertyName]) { 
      $scope[propertyName] = [] 
     } 
    }); 
    array.forEach(function (objecInArray) { 
     scopedPropertieNames.forEach(function(propertyName) { 
      $scope[propertyName].push(objecInArray[propertyName]) 
     }) 
    }); 
} 

toScope(['name', 'city'], myArray); 
console.log($scope) //{name: Array[3], city: Array[3]}