Разобрать данные в JSON - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть одна конкретная проблема, с которой мне трудно найти ответ.

Это код:

records.forEach(function(record){
    var personID = record.id;
    var personsInterest = record.interest;

    console.log(personID);
    console.log(personsInterest);
    console.log();
}

Выводит следующее:

138
death note

146
poop

138
poop

146
rick and morty

138
rick and morty

138
lil peep

145
420

Мне бы очень хотелось, чтобы код для хранения таких данных

[
    {
        id: "138",
        interests:["death note","poop","rick and morty","lil peep"]
    },
    {
        id: "146",
        interests:["poop","rick and morty"]
    },
    {
        id: "145",
        interests:["420"]
    }
] 

где они упорядочены по длине массива интересов

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Чтобы достичь ожидаемого результата, используйте нижеприведенную опцию

  1. Цикл главного оборота с использованием forEach
  2. Созданный результат обр
  3. Добавление нового объекта в результат обр
  4. Остальное толчок к массиву процентов

let records = [
  {
    id: 138,
    interests: "death note"
  },
  {
    id: 146,
    interests: "poop"
  },
  {
    id: 138,
    interests: "poop"
  },
  {
    id: 146,
    interests: "rick and morty"
  },
  {
    id: 138,
    interests: "rick and morty"
  },
  {
    id: 138,
    interests: "lil peep"
  },
  {
    id: 145,
    interests: "420"
  }
];

let result = [];
records.forEach(record => {
  if (result.filter(item => item.id == record.id).length == 0) {
    // check whether id exists in result array, if not push object to result array
    result.push({ id: record.id, interests: [record.interests] });
  } else {
    //if id already exists in result array, push interest to interest array of that id
    result.forEach(v => {
      if (v.id == record.id) {
        v.interests.push(record.interests);
      }
    });
  }
});

console.log(result);

codepen - https://codepen.io/nagasai/pen/Pxmwjp?editors=1010

0 голосов
/ 15 ноября 2018

Используйте метод сортировки с подходящей функцией сравнения для сортировки вашего массива.arr.sort(compareFunction(a,b))

Метод сортировки принимает функцию и сортирует элементы массива в соответствии с возвращаемым значением предоставленной функции.Давайте назовем функцию compareFunction(a, b).
Если возвращаемое значение compareFunction(a, b) меньше 0: a идет первым.
Если возвращаемое значение compareFunction(a, b) больше 0: b идет первым.
Если возвращаемое значение compareFunction(a, b) равно 0: ничего не делает.

Вы хотите, чтобы элемент, который имеет более высокий интерес.длина идет первым.Таким образом, мы можем вернуть b.interest.length - a.interest.length.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

var records = [{
    id: 10,
    interest: ["poop", "rick and morty"]
  },
  {
    id: 11,
    interest: ["eminem", "snoop dog"]
  },
  {
    id: 12,
    interest: ["death note", "poop", "rick and morty", "lil peep"]
  },
  {
    id: 13,
    interest: ["god of war"]
  },
];

records = records.sort((a, b) => b.interest.length - a.interest.length);

console.log(records);
0 голосов
/ 15 ноября 2018

Это должно работать. Аннотируется в комментариях.

const records = [{
    id: 138,
    interest: 'death note'
  },

  {
    id: 146,
    interest: 'poop'
  },

  {
    id: 138,
    interest: 'poop'
  },

  {
    id: 146,
    interest: 'rick and morty'
  },

  {
    id: 138,
    interest: 'rick and morty'
  },

  {
    id: 138,
    interest: 'lil peep'
  }
];

const sorted = records.reduce((all, record) => {
  const person = all.find(p => p.id === record.id);
  //If already exists person now contains existing person
  if (person) {
    person.interests.push(record.interest);
    //add new interest
  } else all.push({
    id: record.id,
    interests: [record.interest]
    //creates new person object
  });

  return all;
}, []).sort((a, b) => b.interests.length - a.interests.length);
//sorts based on length of interest array

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