Сравнение пустого списка из JSON с пустым списком

#javascript #node.js #json

#javascript #node.js #json

Вопрос:

Я пытаюсь проверить в JavaScript, является ли значение из json пустым списком или нет. Я, очевидно, пробовал json.bundleProductSummaries != [] . Это не работает, однако это работает:

 JSON.stringify(json.bundleProductSummaries) != JSON.stringify([])
  

Мой json :

   {
    "bundleProductSummaries": [

    ]
  }
  

Мой код :

 fs = require('fs')
body = fs.readFileSync('./json.txt',{encoding : 'utf-8'})
// ---- Parsing de body ----
let json = JSON.parse(body);
let colored = null;

if(json.bundleProductSummaries != []){
    json = json.bundleProductSummaries[0];
}
  

Спасибо за ваши будущие ответы!
Синдорик

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

1. В чем проблема. Вы хотите знать объяснение кода…

Ответ №1:

Вам нужно проверить длину

 json.bundleProductSummaries.length === 0
  

Потому что в JS

 console.log([] === [] )  

поскольку это две разные ссылки на память.

Но когда два массива будут оцениваться как true?

Когда они оба, значение, которое вы сравниваете, имеет одинаковую ссылку

 let a = []

console.log(a === a)  

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

1. Спасибо за ваш ответ. То есть, по сути, он ведет себя как указатель в C? Я полагаю, что это также относится к dict и другим подобным структурам.

Ответ №2:

Вы можете проверить length массив, чтобы проверить, пуст ли он

 let obj = {
    "bundleProductSummaries": []
}
console.log(obj.bundleProductSummaries.length === 0)  

В вашем случае вам может просто не понадобиться сравнивать, потому что вы используете это в if инструкции и 0 само по себе является ложным значением.

 let obj = {
   "bundleProductSummaries": []
}
if(!obj.bundleProductSummaries.length){
  console.log("Array is empty")
}