Как получить последний объект JSON из JSONArray для заданного значения?

#javascript #arrays #json #performance

#javascript #массивы #json #Производительность

Вопрос:

У меня есть JSONArray, подобный приведенному ниже

 [
    {
        "id": 1,
        "firstName": "abc",
        "isActive": true
    },
    {
        "id": 2,
        "firstName": "cde",
        "isActive": false
    },
    {
        "id": 3,
        "firstName": "efg",
        "isActive": true
    },
    {
        "id": 4,
        "firstName": "ghi",
        "isActive": false
    }
]
  

Теперь я хочу получить последний объект из этого массива, имеющий значение «isActive»: true, используя наиболее эффективный и оптимизированный способ.

 {
    "id": 3,
    "firstName": "efg",
    "isActive": true
}
  

Обновить :

пусть getLast = items.filter(item => item.isActive === true);

Я попытался использовать решение, предоставленное @brk. Но есть ли какой-либо способ получить объект с помощью без создания нового массива.

Ответ №1:

Сначала filter с условием isActive === true . Это создаст новый массив, который затем будет использоваться array.length-1 для получения последнего элемента

 let data = [{
    "id": 1,
    "firstName": "abc",
    "isActive": true
  },
  {
    "id": 2,
    "firstName": "cde",
    "isActive": false
  },
  {
    "id": 3,
    "firstName": "efg",
    "isActive": true
  },
  {
    "id": 4,
    "firstName": "ghi",
    "isActive": false
  }
]

let getLast = data.filter(item => item.isActive === true);
console.log(getLast[getLast.length - 1])  

Комментарии:

1. Есть ли какой-либо способ получить объект без создания нового массива?

Ответ №2:

 var jsonObject = [
  {
    "id": 1,
    "firstName": "abc",
    "isActive": true
  },
  {
    "id": 2,
    "firstName": "cde",
    "isActive": false
  },
  {
    "id": 3,
    "firstName": "efg",
    "isActive": true
  },
  {
    "id": 4,
    "firstName": "ghi",
    "isActive": false
  }
];

var lastActiveElement = jsonObject.filter( obj => obj.isActive ).pop();

console.log(lastActiveElement);  

Если это то, что вы ищете

Ответ №3:

 var x=[
  {
    "id": 1,
    "firstName": "abc",
    "isActive": true
  },
  {
    "id": 2,
    "firstName": "cde",
    "isActive": false
  },
  {
    "id": 3,
    "firstName": "efg",
    "isActive": true
  },
  {
    "id": 4,
    "firstName": "ghi",
    "isActive": false
  }
];

//Try the following line

x.filter(x=>x.isActive).slice(-1).pop()  

Комментарии:

1. @brk я удалил == Спасибо за предложение