Получить максимально большие значения ключа с объектом массива - PullRequest
3 голосов
/ 14 марта 2019

Я хочу, чтобы максимальный ключ объекта в массив в Javascript, ниже приведен пример массива JSON.Я пробовал с помощью функции limit () ES6, но она будет возвращаться только при записи, поэтому, пожалуйста, помогите мне получить максимальное значение no.из массива ключей, я также предоставляю вывод, что я хочу, было бы замечательно, если бы решение в функциях высокого порядка (ES6)

let arr = [{
                key : 1,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 1,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 2,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 2,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 2,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 3,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 3,
                name : 'testaa',
                dept : 'ggg'
            }]

 output i want maximum key of array:


    arr = [{
                key : 3,
                name : 'testaa',
                dept : 'ggg'
            }, {
                key : 3,
                name : 'testaa',
                dept : 'ggg'
            }]

Я попытался с функцией снижения, но получить только одну запись

let data = myArray.reduce(function(prev, curr) {
    return prev.key > curr.key ? prev : curr;
});

Ответы [ 4 ]

4 голосов
/ 14 марта 2019

Вы можете сделать это в два шага:

  1. Найти максимальное значение, используя Math.max
  2. Отфильтровать массив с этим значением, используя .filter()

let arr = [{
  key: 1,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 1,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 3,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 3,
  name: 'testaa',
  dept: 'ggg'
}];

let max = Math.max(...arr.map(item => item.key));

console.log(arr.filter(item => item.key === max));
3 голосов
/ 14 марта 2019

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

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

const arr = [{
  key: 1,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 1,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 2,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 3,
  name: 'testaa',
  dept: 'ggg'
}, {
  key: 3,
  name: 'testaa',
  dept: 'ggg'
}];

const higherKey = arr.reduce((tmp, x) => {
  if (!tmp.length || tmp[0].key < x.key) {
    return [x];
  }

  if (tmp[0].key === x.key) {
    tmp.push(x);
  }

  return tmp;
}, []);

console.log(higherKey);
0 голосов
/ 14 марта 2019

Если вы хотите использовать reduce, за одну итерацию вы можете использовать его вот так (это действительно многословно, вы можете упростить, если хотите):

let data = arr.reduce(function(acc, curr) {
    // If there is not data on the accumulator, add the first element
    if (acc.length === 0) {
        acc.push(curr);
        return acc;
    }
    // if current key is smaller than the stored one, clear and start a new accumulator
    if (acc[0].key < curr.key) {
        acc = [];
        acc.push(curr);
    }
    // If key is the same than the stored one, add it to the accumulator
    else if(acc[0].key === curr.key) {
        acc.push(curr);
    }

    // Return the accumulator
    return acc;
}, []);
0 голосов
/ 14 марта 2019
let arr = [{
    key : 1,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 1,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 3,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 2,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 2,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 8,
    name : 'testaa',
    dept : 'ggg'
}, {
    key : 3,
    name : 'testaa',
    dept : 'ggg'
}]
let max = arr[0];
let data = arr.forEach(function(curr,index) {
if(max.key < curr.key) {
max = curr;
}
});
result = arr.map((item) => {
return item.key === map.key;
});
console.log(result)

Я бы предложил использовать два цикла один для определения максимального ключа, а затем отфильтровать эти ключи, сложность была бы o (n)

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