Javascript 计数对象的键有点表示法

Javascript count object's key having dot notation

正在尝试计算 javascript 对象中的数组。此响应来自 laravel 验证器

  {  
   "message":"The given data was invalid.",
   "errors":{  
      "roomtype_id":[  
         "Please select a room type"
      ],
      "price":[  
         "Price cannot be empty"
      ],
      "amenities":[  
         "Atleast select one amenities"
      ],
      "floor.0":[  
         "Please select a floor"
      ],
      "floor.1":[  
         "Please select a floor"
      ],
      "floor.2":[  
         "Please select a floor"
      ],
      "floor.3":[  
         "Please select a floor"
      ],
      "floor.4":[  
         "Please select a floor"
      ],
      "room_number.0":[  
         "Room number cannot be empty"
      ],
      "room_number.1":[  
         "Room number cannot be empty"
      ],
      "room_number.2":[  
         "Room number cannot be empty"
      ],
      "room_number.3":[  
         "Room number cannot be empty"
      ],
      "room_number.4":[  
         "Room number cannot be empty"
      ],
      "room_number.5":[  
         "Room number cannot be empty"
      ],
      "room_number.6":[  
         "Room number cannot be empty"
      ],
      "room_number.7":[  
         "Room number cannot be empty"
      ],
      "room_number.8":[  
         "Room number cannot be empty"
      ],
      "room_number.9":[  
         "Room number cannot be empty"
      ],
      "room_number.10":[  
         "Room number cannot be empty"
      ],
      "room_number.11":[  
         "Room number cannot be empty"
      ],
      "room_number.12":[  
         "Room number cannot be empty"
      ],
      "room_number.13":[  
         "Room number cannot be empty"
      ],
      "room_number.14":[  
         "Room number cannot be empty"
      ],
      "room_number.15":[  
         "Room number cannot be empty"
      ],
      "room_number.16":[  
         "Room number cannot be empty"
      ],
      "room_number.17":[  
         "Room number cannot be empty"
      ],
      "room_number.18":[  
         "Room number cannot be empty"
      ],
      "room_number.19":[  
         "Room number cannot be empty"
      ],
      "room_number.20":[  
         "Room number cannot be empty"
      ],
      "room_number.21":[  
         "Room number cannot be empty"
      ],
      "room_number.22":[  
         "Room number cannot be empty"
      ],
      "room_number.23":[  
         "Room number cannot be empty"
      ],
      "room_number.24":[  
         "Room number cannot be empty"
      ],
      "room_number.25":[  
         "Room number cannot be empty"
      ],
      "room_number.26":[  
         "Room number cannot be empty"
      ],
      "room_number.27":[  
         "Room number cannot be empty"
      ],
      "room_number.28":[  
         "Room number cannot be empty"
      ]
   }
}

在上面的js对象中,error对象包含"floor.0":["Please select a floor"],"floor.1":["Please select a floor"],"floor.2":["Please select a floor"]

我想计算有多少个 floor.* 数组存在

注意: 我正在访问如下所示的单个值

$("#floor_error_1").text(data.responseJSON.errors["floor.0"]);
$("#floor_error_2").text(data.responseJSON.errors["floor.1"]);

怎么算?并循环并打印错误?

您可以使用 Object.keys() to get the keys of error in an array. Then filter only the items startsWith "floor" 并取其长度。

您也可以使用正则表达式代替 startsWith

Object.keys(data.errors).filter(x => x.startsWith('floor')).length

打印错误你可以试试:

let errorKeys = Object.keys(data.errors).filter(x => x.startsWith('floor'));

let count = errorKeys.length;

let floorErrors = errorKeys.map(key => ({
    key: key,
    errors: data.errors[key]
}));

let data = {
  "message": "The given data was invalid.",
  "errors": {
    "roomtype_id": [
      "Please select a room type"
    ],
    "price": [
      "Price cannot be empty"
    ],
    "amenities": [
      "Atleast select one amenities"
    ],
    "floor.0": [
      "Please select a floor"
    ],
    "floor.1": [
      "Please select a floor"
    ],
    "floor.2": [
      "Please select a floor"
    ],
    "floor.3": [
      "Please select a floor"
    ],
    "floor.4": [
      "Please select a floor"
    ],
    "room_number.0": [
      "Room number cannot be empty"
    ],
    "room_number.1": [
      "Room number cannot be empty"
    ],
    "room_number.2": [
      "Room number cannot be empty"
    ],
    "room_number.3": [
      "Room number cannot be empty"
    ],
    "room_number.4": [
      "Room number cannot be empty"
    ],
    "room_number.5": [
      "Room number cannot be empty"
    ],
    "room_number.6": [
      "Room number cannot be empty"
    ],
    "room_number.7": [
      "Room number cannot be empty"
    ],
    "room_number.8": [
      "Room number cannot be empty"
    ],
    "room_number.9": [
      "Room number cannot be empty"
    ],
    "room_number.10": [
      "Room number cannot be empty"
    ],
    "room_number.11": [
      "Room number cannot be empty"
    ],
    "room_number.12": [
      "Room number cannot be empty"
    ],
    "room_number.13": [
      "Room number cannot be empty"
    ],
    "room_number.14": [
      "Room number cannot be empty"
    ],
    "room_number.15": [
      "Room number cannot be empty"
    ],
    "room_number.16": [
      "Room number cannot be empty"
    ],
    "room_number.17": [
      "Room number cannot be empty"
    ],
    "room_number.18": [
      "Room number cannot be empty"
    ],
    "room_number.19": [
      "Room number cannot be empty"
    ],
    "room_number.20": [
      "Room number cannot be empty"
    ],
    "room_number.21": [
      "Room number cannot be empty"
    ],
    "room_number.22": [
      "Room number cannot be empty"
    ],
    "room_number.23": [
      "Room number cannot be empty"
    ],
    "room_number.24": [
      "Room number cannot be empty"
    ],
    "room_number.25": [
      "Room number cannot be empty"
    ],
    "room_number.26": [
      "Room number cannot be empty"
    ],
    "room_number.27": [
      "Room number cannot be empty"
    ],
    "room_number.28": [
      "Room number cannot be empty"
    ]
  }
}

let errorKeys = Object.keys(data.errors).filter(x => x.startsWith('floor'));

let count = errorKeys.length;

let floorErrors = errorKeys.map(key => ({
    key: key,
    errors: data.errors[key]
}));

console.log(errorKeys, count, floorErrors)

console.log()

您可以 循环计算 错误:

    var data = {};
 data.responseJSON = '{"message":"The given data was invalid.","errors":{"roomtype_id":["Please select a room type"],"price":["Price cannot be empty"],"amenities":["Atleast select one amenities"],"floor.0":["Please select a floor"],"floor.1":["Please select a floor"],"floor.2":["Please select a floor"],"floor.3":["Please select a floor"],"floor.4":["Please select a floor"],"room_number.0":["Room number cannot be empty"],"room_number.1":["Room number cannot be empty"],"room_number.2":["Room number cannot be empty"],"room_number.3":["Room number cannot be empty"],"room_number.4":["Room number cannot be empty"],"room_number.5":["Room number cannot be empty"],"room_number.6":["Room number cannot be empty"],"room_number.7":["Room number cannot be empty"],"room_number.8":["Room number cannot be empty"],"room_number.9":["Room number cannot be empty"],"room_number.10":["Room number cannot be empty"],"room_number.11":["Room number cannot be empty"],"room_number.12":["Room number cannot be empty"],"room_number.13":["Room number cannot be empty"],"room_number.14":["Room number cannot be empty"],"room_number.15":["Room number cannot be empty"],"room_number.16":["Room number cannot be empty"],"room_number.17":["Room number cannot be empty"],"room_number.18":["Room number cannot be empty"],"room_number.19":["Room number cannot be empty"],"room_number.20":["Room number cannot be empty"],"room_number.21":["Room number cannot be empty"],"room_number.22":["Room number cannot be empty"],"room_number.23":["Room number cannot be empty"],"room_number.24":["Room number cannot be empty"],"room_number.25":["Room number cannot be empty"],"room_number.26":["Room number cannot be empty"],"room_number.27":["Room number cannot be empty"],"room_number.28":["Room number cannot be empty"]}}';
 data.responseJSON = JSON.parse( data.responseJSON );

        //Start of looping here
 var counter = 0;
 for ( var key in data.responseJSON.errors ) {
                //Check if 'floor' is found on kkey
  if ( key.indexOf( "floor." ) !== -1 ) {
   //the key has text floor.
   counter++;
   console.log( data.responseJSON.errors[ key ][0] );
  } 
 }
 
 console.log( "Total error is " + counter );

这将显示地板的所有错误并计算它。一石打二鸟