сопоставить отдельный объект из массива JSON с новым списком JSON. - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть JSON Array объектов, таких как:

$scope.people = [
  {id: 1, forename: 'Bob', surname: 'Bobbington', DOB: '01/01/1990', address: '123 Fake St'},
  {id: 2, forename: 'Bill', surname: 'Billster', DOB: '01/12/1999', address: '56 Road'},
  {id: 3, forename: 'Sally', surname: 'Bobbington', DOB: '15/04/1987', address: '123 Fake St'},
  {id: 4, forename: 'Flerp', surname: 'Derp', DOB: '01/09/1991', address: '34 Derpington'}
];

, но мне нужно извлечь одну запись (и определенные поля) в ее собственный список на основе значения, в данном случае id.

Я использовал .map раньше, но это создаст новый массив всех записей, но позволяет мне указать поле, я не знаю, как я могу фильтровать в этой точке

specificFields = RawData.map(function (el) {
  return ({
    surname: el['surname'].replace(/ /g, ''),
    DOB: el['DOB'].replace(/ /g, '')
    })
 })

Я не уверен, как извлечь одну запись на основе одного значения, так как в моем случае идентификатор всегда будет уникальным, но если это не так, как процесс, ожидающий 1 запись, будет обрабатывать ее, когда она мне нужна как однасписок не массив.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Как насчет использования фильтра ?

    var people = [
      {id: 1, forename: 'Bob', surname: 'Bobbington', DOB: '01/01/1990', address: '123 Fake St'},
      {id: 2, forename: 'Bill', surname: 'Billster', DOB: '01/12/1999', address: '56 Road'},
      {id: 3, forename: 'Sally', surname: 'Bobbington', DOB: '15/04/1987', address: '123 Fake St'},
      {id: 4, forename: 'Flerp', surname: 'Derp', DOB: '01/09/1991', address: '34 Derpington'}
    ];

    let result = people.filter(person => person .id == 3);
    console.log(result);

В противном случае вы можете использовать angularjs $ filter

  • PS 1 : я использую простойvar (не $scope, поэтому вы можете увидеть результат во фрагменте).
  • PS 2 : Если вы не хотите также возвращать поля специфики, вам придется отобразить результатзначение (см. ответ chŝdk )
0 голосов
/ 13 сентября 2018

Здесь вы преобразуете только элементы array, не выбирая правильное object.

. Вам нужно только фильтр array, сначала используя .filter() метод , затем преобразуйте результат с помощью .map() метод :

const specificFields = RawData.filter(e => e.id === id).map(function (el) {
  return ({
    surname: el['surname'].replace(/ /g, ''),
    DOB: el['DOB'].replace(/ /g, '')
    });
 });

Демонстрация:

const RawData = [
  {id: 1, forename: 'Bob', surname: 'Bobbington', DOB: '01/01/1990', address: '123 Fake St'},
  {id: 2, forename: 'Bill', surname: 'Billster', DOB: '01/12/1999', address: '56 Road'},
  {id: 3, forename: 'Sally', surname: 'Bobbington', DOB: '15/04/1987', address: '123 Fake St'},
  {id: 4, forename: 'Flerp', surname: 'Derp', DOB: '01/09/1991', address: '34 Derpington'}
];

const id = 2;

const specificFields = RawData.filter(e => e.id === id).map(function (el) {
  return ({
    surname: el['surname'].replace(/ /g, ''),
    DOB: el['DOB'].replace(/ /g, '')
    });
 });
 
 console.log(specificFields);

Если id не уникален:

Если id не уникален, вам нужно проверить все objectсвойства, вы можете сделать это, используя .every() метод над свойствами каждого повторяющегося объекта внутри filter() обратный вызов:

const specificFields = RawData.filter(e => Object.keys(e).every(k => e[k] == person[k])).map(function (el) {
  return ({
    surname: el['surname'].replace(/ /g, ''),
    DOB: el['DOB'].replace(/ /g, '')
    });
 });

Demo:

const RawData = [
  {id: 1, forename: 'Bob', surname: 'Bobbington', DOB: '01/01/1990', address: '123 Fake St'},
  {id: 2, forename: 'Bill', surname: 'Billster', DOB: '01/12/1999', address: '56 Road'},
  {id: 3, forename: 'Sally', surname: 'Bobbington', DOB: '15/04/1987', address: '123 Fake St'},
  {id: 4, forename: 'Flerp', surname: 'Derp', DOB: '01/09/1991', address: '34 Derpington'}
];

const person = {id: 4, forename: 'Flerp', surname: 'Derp', DOB: '01/09/1991', address: '34 Derpington'};
 
const specificFields = RawData.filter(e => Object.keys(e).every(k => e[k] == person[k])).map(function (el) {
  return ({
    surname: el['surname'].replace(/ /g, ''),
    DOB: el['DOB'].replace(/ /g, '')
    });
 });
 
 console.log(specificFields);
0 голосов
/ 13 сентября 2018

Вы можете перебирать массив JSON и фильтровать по идентификатору, как показано ниже -

angular.forEach($scope.people, function(people) {
  if(people.id == filterID){
    // your code goes here
    console.log(people);
  }
});

Если идентификатор не является уникальным, вы получите несколько записей в массиве с одним и тем же идентификатором, и вы должны поместить бизнес-логику / проверку для обработки / отклонения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...