簡體   English   中英

是否有任何干凈和更好的方法可以根據 javascript 中的條件替換 object 值

[英]Is there any clean and better way of replacing object value based on condition in javascript

有沒有更好的方法可以使用普通的 javascript 或使用 lodash package。 感覺這段代碼有點丑,違反了DRY原則。

{
  hotelName                 : 'abc',
  starRating                : '',
  contactName               : 'xyz',
  phoneNumber               : '917777777777',
  address                   : 'my address',
  city                      : 'a city',
  placeForSearch            : 'dnjwjn',
  postalCode                : '888888',
  parking                   : 'No',
  breakfast                 : 'Yes, Free',
  facilities                : [ 'Garden', 'Restaurant', 'Terrace' ],
  extraBed                  : 'Yes',
  noOfExtraBeds             : '2',
  freeCancellationAvailable : 'Day of arrival',
  ifNotCancelledBeforeDate  : 'of the first day',
  checkIn                   : '00 : 00',
  checkOut                  : '00 : 00',
  accomodateChildren        : 'No',
  allowPets                 : 'No',
  provideDormitoryForDriver : 'No',
  isPrepaymentRequired      : 'No',
  GST                       : 'No',
  tradeName                 : '',
  GSTIN                     : '',
  panCardNumber             : '',
  state                     : '',
  mainPhoto                 : 'public/abc/1622985481065880430129042agra.jpeg',
  photos                    : [
    'public/abc/1622985481065286597229809mumbai.jpg',
    'public/abc/1622985481066077551094770munnar.jpg',
    'public/abc/1622985481066392466455226mysore.jpg'
  ]
}

注意:這里只有一些“否”或“是”應該轉換為 boolean 值,所以我不能循環對象。

使用 object 解構也不起作用。

  fields.extraBed=fields.extraBed==="No"?false:true
  fields.accomodateChildren=fields.accomodateChildren==="No"?false:true
  fields.allowPets=fields.allowPets==="No"?false:true
  fields.isPrepaymentRequired=fields.isPrepaymentRequired==="No"?false:true
  fields.provideDormitoryForDriver=fields.provideDormitoryForDriver==="No"?false:true
  fields.GST=fields.GST==="No"?false:true

使用原始的 object 作為初始值,創建要轉換的鍵數組,然后對其進行縮減:

 const booleanKeys = ['extraBed', 'accomodateChildren', 'allowPets', 'isPrepaymentRequired', 'provideDormitoryForDriver', 'GST'] const transform = obj => booleanKeys.reduce((acc, key) => ({...acc, [key]: obj[key] === 'Yes' }), obj) const obj = {"hotelName":"abc","starRating":"","contactName":"xyz","phoneNumber":"917777777777","address":"my address","city":"a city","placeForSearch":"dnjwjn","postalCode":"888888","parking":"No","breakfast":"Yes, Free","facilities":["Garden","Restaurant","Terrace"],"extraBed":"Yes","noOfExtraBeds":"2","freeCancellationAvailable":"Day of arrival","ifNotCancelledBeforeDate":"of the first day","checkIn":"00: 00","checkOut":"00: 00","accomodateChildren":"No","allowPets":"No","provideDormitoryForDriver":"No","isPrepaymentRequired":"No","GST":"No","tradeName":"","GSTIN":"","panCardNumber":"","state":"","mainPhoto":"public/abc/1622985481065880430129042agra.jpeg","photos":["public/abc/1622985481065286597229809mumbai.jpg","public/abc/1622985481066077551094770munnar.jpg","public/abc/1622985481066392466455226mysore.jpg"]} const result = transform(obj) console.log(result)

let result = Object.entries(inputObject)
.map(([k,v]) => [k,v === 'Yes'? true : v === 'No' ? false : v]);

console.log(result);

使用Object.entries() ,例如:

let obj = {
  hotelName: 'abc',
  starRating: '',
  contactName: 'xyz',
  phoneNumber: '917777777777',
  address: 'my address',
  city: 'a city',
  placeForSearch: 'dnjwjn',
  postalCode: '888888',
  parking: 'No',
  breakfast: 'Yes, Free',
  facilities: [ 'Garden', 'Restaurant', 'Terrace' ],
  extraBed: 'Yes',
  noOfExtraBeds: '2',
  freeCancellationAvailable: 'Day of arrival',
  ifNotCancelledBeforeDate: 'of the first day',
  checkIn: '00 : 00',
  checkOut: '00 : 00',
  accomodateChildren: 'No',
  allowPets: 'No',
  provideDormitoryForDriver: 'No',
  isPrepaymentRequired: 'No',
  GST: 'No',
  tradeName: '',
  GSTIN: '',
  panCardNumber: '',
  state: '',
  mainPhoto: 'public/abc/1622985481065880430129042agra.jpeg',
  photos: [
    'public/abc/1622985481065286597229809mumbai.jpg',
    'public/abc/1622985481066077551094770munnar.jpg',
    'public/abc/1622985481066392466455226mysore.jpg'
  ]
};

Object.entries(obj).forEach(([k,v]) => {
  if (v === 'Yes') {
    obj[k] = true
  } else if(v == 'No') {
    obj[k] = false
  }
});

console.log(obj);

暫無
暫無

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

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