Манипулирование массивом на основе значения свойства внутреннего объекта? - PullRequest
0 голосов
/ 10 октября 2018

Я работаю с wordpressAPI, чтобы получить информацию и отобразить ее в приложении javascript.Я хотел бы знать, как правильно манипулировать массивом на основе данных в возвращаемых объектах.Например:

Данные, которые я получаю, - это массив, содержащий 3 объекта:

data = [{...}, {...}, {...}]

Объекты содержат такие данные, как:

{ id: 1234, slug: 'slug-name', status: 'published' }

.. и многое другое.Но то, что я хотел бы знать, это как зацикливаться на каждом объекте и проверять наличие slug === 'slug-name-2', и если это так, я хочу взять весь этот объект со всей его информацией и переместить его вначало массива данных.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Вы можете отсортировать это на основе строки пули.

let data = [
  { id: 1234, slug: 'slug-name', status: 'published' },
  { id: 1235, slug: 'slug-name-1', status: 'published' },
  { id: 1236, slug: 'slug-name-2', status: 'published' },
  { id: 9999, slug: 'slug-name-2', status: 'published' },
  { id: 1237, slug: 'hello', status: 'published' }
];

let sortedData = data.sort((a, b) => b.slug.indexOf('slug-name-2') - a.slug.indexOf('slug-name-2'));
console.log(sortedData);
0 голосов
/ 10 октября 2018

Вы можете сделать это разными способами, одним из способов будет «псевдосортировка» массива по заданному ключу и значению:

const input = [
  { id: 1234, slug: 'slug-name-0', status: 'published' },  
  { id: 1234, slug: 'slug-name-1', status: 'published' },
  { id: 1234, slug: 'slug-name-2', status: 'published' },
  { id: 1234, slug: 'slug-name-3', status: 'published' },
  { id: 1234, slug: 'slug-name-4', status: 'published' }
]

const output = input.sort((a, b) => {
  if (b.slug === 'slug-name-2') return 1;
  return 0;
})

console.log(output);
0 голосов
/ 10 октября 2018

Вот один из способов сделать это

//find index of the slug-name-2
let index = data.findIndex((x => x.slug === 'slug-name-2');
//get object
let slug = data[index];
//remove from current location
data.splice(index)
//add it to the beginning
data.unshift(slug);

Я уверен, что можно найти еще 100 способов и, возможно, более эффективных.

Посмотрите на массив .Методы-прототипы , их так много, что вы можете использовать комбинацию из нескольких и манипулировать массивом многими способами.

...