Возможно ли вернуть json_encode(), но в виде массива, а не объекта, чтобы я мог легко использовать методы `.filter()` или `.forEach()`

#javascript #php #ecmascript-6

#javascript #php #ecmascript-6

Вопрос:

Я просто хочу убедиться, что такой вещи нет… потому что я не могу найти ничего, что упоминало бы об этом:

В настоящее время, когда я использую json_encode($array) , я получаю объект json, который выглядит следующим образом:

 {
    "1": {"user_id":1,"test":"","user_name":"potato0","isok":"true"},

    "2":{"user_id":2,"test":"","user_name":"potato1","isok":" true"},

    "3":{"user_id":3,"test":"","user_name":"potato2","isok":" true"},

    "4":{"user_id":4,"test":"","user_name":"potato3","isok":"locationd"}
}
  

и я хотел бы запустить .filter() / .forEach() методы.

но они не будут выполняться на объектах ( {...} ) и будут выполняться на массивах ( [...] ).

Редактировать: Кажется, я не уверен, что я получаю, поэтому это реальный пример var_dump и json_encode():

var_dump($array);

 array (size=2)
  'status' => boolean true
  'data' => 
    array (size=3)
      'fruits' => 
        array (size=9)
          'fruit_id' => int 246
          'fruit_name' => string 'banana' (length=15)
      'vegtables' => 
        array (size=9)
          'veg_id' => int 253
          'fruit_name' => string 'potato' (length=20)
  

echo json_encode([‘status’ => true, ‘data’ => $fruits]);

 {  
   "status":true,
   "data":{  
      "fruits":{  
         "fruit_id":246,
         "fruit_name":"banana"
      },
      "vegtables":{  
         "veg_id":253,
         "veg_name":"potato"
      }
   }
}
  

возвращаемый json определяется как «Объект» (проверяется с помощью typeof )

** Я не хочу превращать свой объект в массив на стороне js, я знаю об этом «трюке» и предпочитаю извлекать массив json из php в виде массива, пожалуйста, сосредоточьтесь на моем вопросе **

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

1. Ваш $array выглядит 1-индексированным , а не 0-индексированным , не знаю PHP, но это не выглядит многообещающим

2. Object.values(.....)

3. @Snow Не могли бы вы объяснить более кратко?

4. Пожалуйста, добавьте php-скрипт

5. @wellhellothere : тогда вам нужно создать массив вместо объекта

Ответ №1:

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

Ваш ввод :

  var data = {
    "1": {"user_id":1,"test":"","user_name":"potato0","isok":"true"},

    "2":{"user_id":2,"test":"","user_name":"potato1","isok":" true"},

    "3":{"user_id":3,"test":"","user_name":"potato2","isok":" true"},

    "4":{"user_id":4,"test":"","user_name":"potato3","isok":"locationd"}
};
  

Преобразовать объект в массив

  var result = Object.keys(data).map(function(key) {
  return data[key];
});
  

Теперь вы можете использовать Filter для преобразованного массива

 var filtered = result.filter(row => { return row.user_id > 1; });
  

И отфильтрованный результат:

 [{
"user_id": 2,
"test": "",
"user_name": "potato1",
"isok": " true"
},{
"user_id": 3,
"test": "",
"user_name": "potato2",
"isok": " true"
},{
"user_id": 4,
"test": "",
"user_name": "potato3",
"isok": "locationd"
}]
  

Надеюсь, это то, что вы ищете, и вот рабочая демонстрационная ссылка:https://playcode.io/282703?tabs=consoleamp;script.jsamp;output