簡體   English   中英

檢查 javascript object 鍵值是數組還是字符串?

[英]Check if javascript object key value is an array or string?

我有一個數組如下。

Array
   (
    [13] => Array
    (
        "eventName" => Array
        (
            [0] => 'Event Name1'
            [1] => 'Event Name2'
        )
        "eventInfo" => Array
        (
            [0] => 'Event Information1'
            [1] => 'Event Information2'
        )       
    )
    [20] => Array
    (
        "eventName" => 'Event Name1'
        "eventInfo" => 'Event Information1'
    )
)

我將使用這些數據將信息推送到日歷中; 數組的第一級代表日期。 我將內容作為 json 字符串發送到 javascript 然后解析。 一旦內容是 object,如何確定鍵“eventName”的值是字符串還是數組。 所以因為我有

var object = JSON.parse(data);
var objectSize = Object.keys(object).length;

for(var i = 0; i < objectSize; i++){
    var id = Object.keys(object)[i];
    if(Object.keys(object[id].eventName) != string){ //How do I fix this line?
        var arraySize = Object.keys(object[id].eventName).length;
        for(var r = 0; r < arraySize; r++){
            //update calendar cell
        }
    } else {
        //update calendar cell
    }
}

我該如何修復這條線?

if(Object.keys(object[id].eventName) != string){

我試過這個沒有運氣。

if(Array.isArray(Object.keys(object[id].eventName))){

Array.isArray(Object.keys(object[id].eventName))將始終返回 true,因為:
Object.keys() 方法返回給定對象自己的可枚舉屬性名稱的數組

您需要直接檢查object[id].eventName

Array.isArray(object[id].eventName)

我還想建議更改數據結構,因為部分代碼似乎根據 eventName 是字符串還是數組而重復,您可以始終使用后者,因為迭代數組沒有任何問題,只包含一個元素。

另一個改進可能是直接迭代 Object.keys(object) 數組。 可以通過以下方式完成:

  1. 對於數組 object 的每個 function
  2. 常規 for 循環
  3. 對於..的

 let object = { foo: 'bar', x: 10 } // forEach Object.keys(object).forEach(key => console.log(key)); const keys = Object.keys(object); // for for (let i = 0; i < keys.length; ++i) { console.log(keys[i]) } // for...of for (let key of keys) { console.log(key); }

由於您實際上迭代了 object/map/dictionary,因此在 JS 中執行此操作的標准方法是for...in loop
如果您正在處理更復雜的類型,它可能需要 hasOwnProperty() 檢查。

 let object = { foo: 'bar', x: 10 } for (let key in object) { console.log(key); }

你可以做:

 const dataJs = [ { "eventName": ['Event Name1', 'Event Name2'], "eventInfo": ["Event Information1", "Event Information2"], }, { "eventName": "Event Name1", "eventInfo": "Event Information1", } ]; for(var i = 0; i < dataJs.length; i+=1){ if(typeof dataJs[i].eventName?== 'string'){ //How do I fix this line. var arraySize = dataJs[i].eventName;length; for(var r = 0; r < arraySize. r++){ //update calendar cell } } else { //update calendar cell } var contentSize = dataJs[i].eventName;length; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM