Получить предыдущий элемент объекта в JavaScript - PullRequest
3 голосов
/ 11 июня 2019

У меня есть объект с ключами и данными.От ключа я хочу получить предыдущий элемент.

Я видел подобные темы раньше, но решения действительно сложны.

Я также добавил функцию, которая не работает, нокак бы я хотел, чтобы это работало

Упрощенный код

let obj = {
  slug:        'my-page',
  title:       'My title',
  description: 'My description',
  content:     'My content'
};

let previous = obj.previousItem('description'); // Does not work

console.log(previous);

Ожидаемый результат

{title: 'My title'}

  • ES5 или даже ES6 в порядке
  • Я предпочитаю простое решение для сложного, может быть, без циклов

Ответы [ 4 ]

0 голосов
/ 11 июня 2019

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

let object = {
    slug: 'my-page',
    title: 'My title',
    description: 'My description',
    content: 'My content'
}
let previous = previousItem(object, 'description');
console.log(previous);


function previousItem(object, str) {
    let lastKey = "";

    for (const key in object) {
        if (object.hasOwnProperty(key)) {
            if (key == str){
                lastKey = lastKey || key;
                let obj = { };
                obj[lastKey] = object[lastKey];
                return obj;
            } else {
                lastKey = key;
            }
        }
    }
}
0 голосов
/ 11 июня 2019

Я думаю, что-то вроде этого

Object.prototype.previousItem = function(propName) {
  const arr = Object.keys(this);
  let indx = arr.indexOf(propName)-1;
  if (indx<0) return null;
  const result = {};
  result[arr[indx]] = this[arr[indx]];
  return result;
}
0 голосов
/ 11 июня 2019

Object.prototype.previousItem = function(propName) {
  const arr = Object.keys(this);
  let indx = arr.indexOf(propName)-1;
  if (indx<0) return null;
  const result = Object.create(null); // just clear output
  result[arr[indx]] = this[arr[indx]];
  return result;
}

let obj = {
  slug:        'my-page',
  title:       'My title',
  description: 'My description',
  content:     'My content'
};

let previous = obj.previousItem('description'); //  work

console.log(previous);
0 голосов
/ 11 июня 2019

Раньше у объекта не было порядка , но на самом деле они есть, и я бы не стал полагаться на этот порядок.

Но в любом случае, вы можете отфильтровать по следующей паре ключ / значение и получить объект.

let obj = { slug: 'my-page', title: 'My title', description: 'My description', content: 'My content' },
    previous = Object.fromEntries(Object
        .entries(obj)
        .filter((_, i, { [i + 1]: next = [] }) => next[0] === 'description')
    );

console.log(previous);
...