কফিস্ক্রিপ্টে বেনামে থাকা অবজেক্টগুলির একটি অ্যারে সংজ্ঞা দেওয়া হচ্ছে


105

আমি কফি স্ক্রিপ্টে বেনামে থাকা বস্তুর একটি অ্যারে কীভাবে সংজ্ঞায়িত করব? ওয়াইএএমএল সিনট্যাক্স ব্যবহার করে এটি কি আদৌ সম্ভব?

আমি জানি যে নামযুক্ত বস্তুর একটি অ্যারে থাকা বেশ সহজ:

items:[
   item1:
      name1:value1
   item2:
      name:value2
]

তবে এটি কিছুটা কৌশলযুক্ত হবে, যদি সেই দুটি বস্তুর নাম না থাকে had

উত্তর:


28

আপনি পারবেন না:

এটি কিছু কৌশল:

items:[
    (name:"value1")
    (name:"value2")
]

অন্য

items:[
    true && name:"value1"
    true && name:"value2"
]

এটিই সর্বোত্তম:

items:[
    {name:"value1"}
    {name:"value2"}
]

6
এটি কি কুরুচিপূর্ণ নয় :( কফিস্ক্রিপ্টটি মূলত ইনডেন্ট ভিত্তিক কোডিংয়ের জন্য দুর্দান্ত তবে বৃহত অবজেক্ট লিটারালগুলির জন্য এটি স্ট্যান্ডার্ড জেএসওনের চেয়ে বেশি ভাল নয় কারণ আপনাকে সমস্ত বন্ধনীর ভারসাম্য বজায় রাখতে হবে এবং আপনি দুষ্টু ট্রেলিং ব্র্যাকেট স্যুপ দিয়ে শেষ করেছিলেন was একটি টিকেট এই সমাধান প্রয়োজন এবং YAML সিনট্যাক্স ব্যবহার করতে পারে তবে দৃশ্যত সেখানে coffeescript মধ্যে পার্স অস্পষ্টতা যা দুর্ভাগ্যজনক এই সমস্যার সমাধানের হয়।
bradgonesurfing

"সত্য ও&" এর পরিবর্তে আপনি অবশ্যই "হ্যাঁ" এবং "বা" বা "না" সমতুল্য ব্যবহার করতে পারেন। "হ্যাঁ এবং" এমনকি ধরণের এমনকি এখানে বোঝা যায়।
জেমসন কুইন

18
আমার উত্তরটি দেখুন - কোনও কৌশল বা ধনুর্বন্ধনী ছাড়াই এটি পুরোপুরি কার্যকর।
মাইকেল হেইস

301

সরল - আপনি নিজের বস্তুর সংজ্ঞা দিচ্ছেন তার চেয়ে কম কলামে নিজেই কমা রাখুন।

a = [
     nameA1: valueA1
     nameA2: valueA2
     nameA3: valueA3
  ,
     nameB1: valueB1
     nameB2: valueB2
     nameB3: valueB3
]

হয়ে যাবে:

var a;

a = [
  {
    nameA1: valueA1,
    nameA2: valueA2,
    nameA3: valueA3
  }, {
    nameB1: valueB1,
    nameB2: valueB2,
    nameB3: valueB3
  }
];

1
কারণ এটি একটি অদ্ভুত চেহারা সমাধান এবং কমাগুলি সহজেই মিস হয়ে যায়
এডি মঙ্গ জুনিয়র জুন

এটা বিপজ্জনক!! কখনও কখনও কেবল শেষ আইটেমটি দিয়ে আপনাকে একটি অ্যারে দেয়! নীচে আমার উদাহরণটি দেখুন ..
ডিন র‌্যাডক্লিফ

1
@ ডিয়ানর্যাডক্লিফ যদি আপনি কমাটি সঠিকভাবে না রাখেন তবে এটি অ্যারেতে শেষ আইটেমটি ফিরিয়ে দেবে, হ্যাঁ, তবে কফি স্ক্রিপ্টটি সিনট্যাকটিকাল চিনির তুলনায় কনভেনশনের ভিত্তিতে নির্মিত হয়নি?
ডুবিলা

আমি [পরের লাইনের বাম দিকে খোলার ইন্ডেন্ট করব , এটি যথেষ্ট হিসাবে বিভ্রান্তিকর ..
ম্যাটানস্টার

4
আমার মনে হয় ভ্যানিলার তুলনায় সরলকরণ এবং উন্নতি হওয়ার পরিবর্তে কফিসিপি অনেক বেশি অপ্রয়োজনীয় জটিলতা সৃষ্টি করে। কফির প্রয়োজন ছাড়াই রেল সংহতকরণের সাথে কেবল সরল .js ব্যবহার করতে পছন্দ করবে।
লাসাগাআন্ড্রয়েড

40

আপনি প্রতিটি বস্তুর মধ্যে কোমাও যুক্ত করতে পারেন: 

items:[
    item1:
        name1:value1
  ,
    item2:
        name:value2
]

14

আমি মনে করি কমা সমাধানটি আরও ভাল, তবে আমি অনুভব করেছি যে আমি এটি সম্পূর্ণতার জন্য যুক্ত করব:

a = [
  {
    nameA1: valueA1
    nameA2: valueA2
    nameA3: valueA3
  }
  {
    nameB1: valueB1
    nameB2: valueB2
    nameB3: valueB3
  }
]

আমি মনে করি এটি কমা সমাধানের চেয়ে অনেক ভাল, যেখানে আপনাকে কমা স্থানান্তরের বিষয়ে সতর্ক থাকতে হবে।
নিমা

3

অ্যারে সংজ্ঞা দেওয়ার সময় আপনি ভেরিয়েবল সংজ্ঞায়িত করতে পারেন, সুতরাং একটি কুরুচিপূর্ণ উত্তর হবে:

a = 
  items: [
    item1 = 
      name: 'value1'
    item2 = 
      name: 'value2'
  ]

এটি কাজ করবে তবে আপনি "সংজ্ঞায়িত, তবে ব্যবহারযোগ্য ভেরিয়েবল (আইটেম 1, আইটেম 2)" সম্পর্কে সতর্কতা পেতে পারেন। আন্ডারস্কোর, ভেরিয়েবল ব্যবহার না করা ভেরিয়েবল বাদ দিতে আরও ভাল উপায় হবে:

a = 
  items: [
    _ = 
      name: 'value1'
    _ = 
      name: 'value2'
  ]

console.log JSON.stringify(a) এটি উত্পাদন করবে:

  {
    "items":[
      {
        "name":"value1"
      },{
        "name":"value2"
      }
    ]
  }

1

ওপি-র প্রশ্নের উত্তর নয়, কেবল আপনি যদি এখানে এসেছিলেন ঠিক একই কারণে যদি আপনি পর্বত শিশিরে কম থাকেন এবং ':' এর পরিবর্তে '=' ব্যবহার করেন, তবে কফিস্ক্রিপ্ট আপনার অ্যারে ঘুরিয়ে দেবে একটি কম্পাইল ত্রুটি ছাড়াই একটি ফ্ল্যাট অ্যারেতে অবজেক্টস:

data = [
    one='one'
    two='two'
  ,
    one='1'
    two='2'
]

উত্পাদন

['one', 'two', '1', '2']

আরও মাউন্টেন শিশির প্রবেশ করান এবং '=' এর সাথে ':' প্রতিস্থাপন করুন।


2
ডাব্লুটিএফ এর সাথে কি পর্বত শিশিরের সম্পর্ক আছে?
fent

1

আমি কিছুটা বিড়বিড় করে বলার পরে খুব খুশি যে আমি ঠিক এইটি সংকলন করতে পেরেছি:

items: [
  nameA: subA
  nameB: subB
,
  nameX: subX
  nameY: subY
]

এটি আপনি যা প্রত্যাশা করতেন ঠিক তেমন ফলাফল দেয়: দুটি বেনামে অবজেক্টের একটি তালিকা।


0

আমি একটি সম্পর্কিত সমস্যার মধ্যে দৌড়ে এবং এই সমাধানটি খুঁজে পেয়েছি। আপনি যদি ব্রেস ছাড়াই অনেকগুলি সি / কে / ভি অবজেক্টের একটি অ্যারে চান, তবে তাদের কয়েকটি ইন্ডেন্ট করুন। কৌতুক করতে পারে বলে মনে হচ্ছে।

data = [                                     
  "2013-09-25T16:46:52.636Z":3,              
    "2013-09-25T16:47:52.636Z":6,            
      "2013-09-25T16:48:52.636Z":2,          
        "2013-09-25T16:49:52.636Z":7,        
  "2013-09-25T16:50:52.636Z":5,              
    "2013-09-25T16:51:52.636Z":2,            
      "2013-09-25T16:52:52.636Z":1,          
        "2013-09-25T16:53:52.636Z":3,        
  "2013-09-25T16:54:52.636Z":8,              
    "2013-09-25T16:55:52.636Z":9,            
      "2013-09-25T16:56:52.636Z":2,          
        "2013-09-25T16:57:52.636Z":5,        
          "2013-09-25T16:58:52.636Z":7       
]                                            

উত্পাদন:

coffee> data
[ { '2013-09-25T16:46:52.636Z': 3 },
  { '2013-09-25T16:47:52.636Z': 6 },
  { '2013-09-25T16:48:52.636Z': 2 },
  { '2013-09-25T16:49:52.636Z': 7 },
  { '2013-09-25T16:50:52.636Z': 5 },
  { '2013-09-25T16:51:52.636Z': 2 },
  { '2013-09-25T16:52:52.636Z': 1 },
  { '2013-09-25T16:53:52.636Z': 3 },
  { '2013-09-25T16:54:52.636Z': 8 },
  { '2013-09-25T16:55:52.636Z': 9 },
  { '2013-09-25T16:56:52.636Z': 2 },
  { '2013-09-25T16:57:52.636Z': 5 },
  { '2013-09-25T16:58:52.636Z': 7 } ]

এটা আমার কাছে পাল্টা স্বজ্ঞাত; আপনি ভাবেন যে এটি উপ-বস্তুগুলি তৈরি করবে তবে আমি মনে করি লাইনের শেষে কমাটি তাকে সেই অবজেক্টটিতে বৈশিষ্ট্য তৈরি করা বন্ধ করতে বলে।


এটি কাজ করার সময়, আমার সন্দেহ হয় যে এটি কীভাবে লাইনগুলি পার্স করা যায় তার একটি পার্শ্ব প্রতিক্রিয়া। যেহেতু ধারাবাহিক রেখাগুলির একই ইন্ডেন্টেশন না থাকে তাই এটি তাদের একই বস্তুতে রাখতে পারে না। স্পষ্টতই, সিন্ট্যাক্স ত্রুটি বাড়ানোর পরিবর্তে এটি একটি নতুন অবজেক্ট শুরু করে। এটি এমন একটি বৈশিষ্ট্য যা সম্ভবত এটি গণনা করা উচিত নয় - যদি না আপনি এটি নথিভুক্ত না পান।
hpaulj

@ এইচপলজ ভাল আপনি যদি এটি করার আরও ভাল উপায় পেয়ে থাকেন তবে আমি সব কান দিচ্ছি
jcollum

1
যেহেতু Pythonআমার 'প্রথম ভাষা' তাই আমি কয়েকটি অতিরিক্ত বন্ধনী এবং ব্রেস ব্যবহার করতে ভয় পাই না not এমনকি কফিস্ক্রিপ্টগুলির যদি তাদের প্রয়োজন না হয় তবে আমি তাদেরকে সহায়ক বলে মনে করি। আপনার দ্বিতীয় ব্লকটি আরও পঠনযোগ্য।
hpulj

0

কেন না:

list = []
list.push
  prop1: val
  prop2: val
list.push
  prop1: val
  prop2: val

এটি আমার কাছে এখনও জেএসের জন্য একটি বিশাল উন্নতি, খুব সহজেই পড়া সহজ, ন্যূনতম এবং লিখতে বেশ নিরাপদ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.