Ota-ona JSON ob'ektini JSda kichik qiymatga asoslangan holda qanday olish mumkin

Mening JSON quyidagilar:

[ RowDataPacket {
    workflowId: 1,
    stepId: 1,
    workflowTypeId: 4,
    baseFieldId: 3,
    relatedFieldId: 0,
    relatedValue: 'YES',
    nextTrueStepId: 2,
    nextFalseStepId: 4 },
  RowDataPacket {
    workflowId: 1,
    stepId: 2,
    workflowTypeId: 2,
    baseFieldId: 4,
    relatedFieldId: 0,
    relatedValue: '',
    nextTrueStepId: 3,
    nextFalseStepId: 4 },
  RowDataPacket {
    workflowId: 1,
    stepId: 3,
    workflowTypeId: 9,
    baseFieldId: 5,
    relatedFieldId: 0,
    relatedValue: 'SUBMITTED',
    nextTrueStepId: 4,
    nextFalseStepId: 0 },
  RowDataPacket {
    workflowId: 1,
    stepId: 4,
    workflowTypeId: 10,
    baseFieldId: 0,
    relatedFieldId: 0,
    relatedValue: '',
    nextTrueStepId: 0,
    nextFalseStepId: 0 } ]

Qanday qilib men keyingi elementga ega bo'lgan ota-onani (masalan, [arr [parentID]) olsam bo'ladi?

Men shunga o'xshash foraklardan foydalanardim, lekin navbat bilan ketma-ketlikni qaytaradi:

 arr.forEach(function(row) {
      nextStep = processFlowRow(row, Id);
     });

EKRAN: Json endi quyidagi kabi ko'rinadi, lekin arr [0] deb chaqirganimda, faqat "[" o'rniga qatorni?

[
{
    "workflowId": 1,
    "stepId": 1,
    "workflowTypeId": 4,
    "baseFieldId": 3,
    "relatedFieldId": 0,
    "relatedValue": "yes",
    "nextTrueStepId": 2,
    "nextFalseStepId": 4
},
{
    "workflowId": 1,
    "stepId": 2,
    "workflowTypeId": 2,
    "baseFieldId": 4,
    "relatedFieldId": 0,
    "relatedValue": "",
    "nextTrueStepId": 3,
    "nextFalseStepId": 4
},
{
    "workflowId": 1,
    "stepId": 3,
    "workflowTypeId": 9,
    "baseFieldId": 1,
    "relatedFieldId": 0,
    "relatedValue": "SUBMITTED",
    "nextTrueStepId": 4,
    "nextFalseStepId": 0
}

]

0
Faqatgina qidirishingizga yordam berish uchun: JSON ma'lumotlar almashuvi uchun matn yozuvi dir. (Davomi) Agar JavaScript-ni manba kodi bilan ishlayotgan bo'lsangiz va string bilan ishlamasangiz, , siz JSON bilan ishlamaysiz. (Agar yuqoridagi bir satrda bo'lsa, JSON-da xususiyat nomlari juft tirnoqlarda bo'lishi kerak, chunki u noto'g'ri JSON bo'lar edi.) Sizda mavjud bo'lgan narsalar JSON emas, balki ob'ektlar qatoridir.
qo'shib qo'ydi muallif T.J. Crowder, manba
Faqatgina qidirishingizga yordam berish uchun: JSON ma'lumotlar almashuvi uchun matn yozuvi dir. (Davomi) Agar JavaScript-ni manba kodi bilan ishlayotgan bo'lsangiz va string bilan ishlamasangiz, , siz JSON bilan ishlamaysiz. (Agar yuqoridagi bir satrda bo'lsa, JSON-da xususiyat nomlari juft tirnoqlarda bo'lishi kerak, chunki u noto'g'ri JSON bo'lar edi.) Sizda mavjud bo'lgan narsalar JSON emas, balki ob'ektlar qatoridir.
qo'shib qo'ydi muallif T.J. Crowder, manba
Aslida, bu to'g'ri ma'lumotlar tuzilmasi emas.
qo'shib qo'ydi muallif Nina Scholz, manba
Aslida, bu to'g'ri ma'lumotlar tuzilmasi emas.
qo'shib qo'ydi muallif Nina Scholz, manba
Aslida, bu to'g'ri ma'lumotlar tuzilmasi emas.
qo'shib qo'ydi muallif Nina Scholz, manba
Buni noto'g'ri deb o'ylaysiz. Siz "ota-ona" ni qidiryapsiz. Siz o'zingizning xususiyatiga asoslangan obyektni izlayapsiz.
qo'shib qo'ydi muallif Turnip, manba
Buni noto'g'ri deb o'ylaysiz. Siz "ota-ona" ni qidiryapsiz. Siz o'zingizning xususiyatiga asoslangan obyektni izlayapsiz.
qo'shib qo'ydi muallif Turnip, manba
Buni noto'g'ri deb o'ylaysiz. Siz "ota-ona" ni qidiryapsiz. Siz o'zingizning xususiyatiga asoslangan obyektni izlayapsiz.
qo'shib qo'ydi muallif Turnip, manba
Buni noto'g'ri deb o'ylaysiz. Siz "ota-ona" ni qidiryapsiz. Siz o'zingizning xususiyatiga asoslangan obyektni izlayapsiz.
qo'shib qo'ydi muallif Turnip, manba
Muammoni hal qilish uchun, manba o'zgaruvchilari console.log va kerakli natija misolini bering.
qo'shib qo'ydi muallif Максим Владимирович, manba
Muammoni hal qilish uchun, manba o'zgaruvchilari console.log va kerakli natija misolini bering.
qo'shib qo'ydi muallif Максим Владимирович, manba
Muammoni hal qilish uchun, manba o'zgaruvchilari console.log va kerakli natija misolini bering.
qo'shib qo'ydi muallif Максим Владимирович, manba
Muammoni hal qilish uchun, manba o'zgaruvchilari console.log va kerakli natija misolini bering.
qo'shib qo'ydi muallif Максим Владимирович, manba

7 javoblar

Buni ko'ring:

//Assuming your data is in a variable named jsonObj
jsonObj.filter(function(elem){
    return elem.nextTrueStepId===3;
})
1
qo'shib qo'ydi
Do'stingizni sinab ko'ring;) Siz aslida kerakli narsani qaytarib beradi;) Mana shu narsa uchun ishlaydigan jsfiddle. jsfiddle.net/jyakwn21
qo'shib qo'ydi muallif Spidi's Web, manba
Bu yoki elementning o'zi emas, balki haqiqiy yoki noto'g'ri bo'lib qaytadi
qo'shib qo'ydi muallif Wayneio, manba

Buni ko'ring:

//Assuming your data is in a variable named jsonObj
jsonObj.filter(function(elem){
    return elem.nextTrueStepId===3;
})
1
qo'shib qo'ydi
Do'stingizni sinab ko'ring;) Siz aslida kerakli narsani qaytarib beradi;) Mana shu narsa uchun ishlaydigan jsfiddle. jsfiddle.net/jyakwn21
qo'shib qo'ydi muallif Spidi's Web, manba
Bu yoki elementning o'zi emas, balki haqiqiy yoki noto'g'ri bo'lib qaytadi
qo'shib qo'ydi muallif Wayneio, manba

JSON datangizdagi xatoliklarni tuzatib, uni kiritish ga saqlab qo'ygandan so'ng, siz faqat bitta elementga mos kelishini kutgandingiz:

input.find(item=>item.nextTrueStepId === 3)

Kod snippet (ES6 ekanligini eslang!):

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var input = [{
  "workflowId": 1,
  "stepId": 1,
  "workflowTypeId": 4,
  "baseFieldId": 3,
  "relatedFieldId": 0,
  "relatedValue": "yes",
  "nextTrueStepId": 2,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 2,
  "workflowTypeId": 2,
  "baseFieldId": 4,
  "relatedFieldId": 0,
  "relatedValue": "",
  "nextTrueStepId": 3,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 3,
  "workflowTypeId": 9,
  "baseFieldId": 1,
  "relatedFieldId": 0,
  "relatedValue": "SUBMITTED",
  "nextTrueStepId": 4,
  "nextFalseStepId": 0
}]

console.log(input.find(item=>item.nextTrueStepId === 3))
</div> </div>
1
qo'shib qo'ydi
Bu men uchun ishlamaydi. Shu bilan ishlash uchun ish zarrachasini almashasizmi?
qo'shib qo'ydi muallif Spidi's Web, manba
@ MirkoVukušić ES6ni o'rganishni qaerdan boshlashimni menga ayta olasizmi?
qo'shib qo'ydi muallif Spidi's Web, manba
Rahmat! Ikkala javob ham ishlaydi, birinchi navbatda qaysi xabarni bilmayman?
qo'shib qo'ydi muallif Wayneio, manba
ES6 parchasi bilan va eng so'nggi JSON tuzilishingiz bilan javobni yangiladim
qo'shib qo'ydi muallif Mirko Vukušić, manba
@Wayneio, men ballar uchun ov qilmayman, shuning uchun sizda :) Lekin agar siz "filtr" yechimiga ishonsangiz, iltimos, agar u ishlayotgan bo'lsa, hodisalar echimlari bir xil emas. Filtr - bu ES5 (ES6-dan foydalana olmaysiz) afzalligi. Bundan tashqari, qatorni (bir element emas) qaytara olishi mumkin, chunki u barcha narsalarni topadi, chunki topilmaning birinchi turi emas. Bu sizning ishingizga bog'liq holda yaxshi yoki yomon bo'lishi mumkin. Agar siz faqat bitta kerak bo'lsa, u holda filtr% 86 sekinroq (shubhasiz, birinchi element to'g'ri kelganda qidirishni to'xtatmaydi). benchmark: jsbench.me/r8izihgj9w/1
qo'shib qo'ydi muallif Mirko Vukušić, manba
@Wayneio ES6ni o'rganishda bo'lgani kabi ES5 haqida etarlicha bilimga ega bo'lsangiz, men "ES6" dagi yangi narsalarni bu yerda ko'rib chiqaman: es6-features.org
qo'shib qo'ydi muallif Mirko Vukušić, manba

JSON datangizdagi xatoliklarni tuzatib, uni kiritish ga saqlab qo'ygandan so'ng, siz faqat bitta elementga mos kelishini kutgandingiz:

input.find(item=>item.nextTrueStepId === 3)

Kod snippet (ES6 ekanligini eslang!):

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var input = [{
  "workflowId": 1,
  "stepId": 1,
  "workflowTypeId": 4,
  "baseFieldId": 3,
  "relatedFieldId": 0,
  "relatedValue": "yes",
  "nextTrueStepId": 2,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 2,
  "workflowTypeId": 2,
  "baseFieldId": 4,
  "relatedFieldId": 0,
  "relatedValue": "",
  "nextTrueStepId": 3,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 3,
  "workflowTypeId": 9,
  "baseFieldId": 1,
  "relatedFieldId": 0,
  "relatedValue": "SUBMITTED",
  "nextTrueStepId": 4,
  "nextFalseStepId": 0
}]

console.log(input.find(item=>item.nextTrueStepId === 3))
</div> </div>
1
qo'shib qo'ydi
Bu men uchun ishlamaydi. Shu bilan ishlash uchun ish zarrachasini almashasizmi?
qo'shib qo'ydi muallif Spidi's Web, manba
@ MirkoVukušić ES6ni o'rganishni qaerdan boshlashimni menga ayta olasizmi?
qo'shib qo'ydi muallif Spidi's Web, manba
Rahmat! Ikkala javob ham ishlaydi, birinchi navbatda qaysi xabarni bilmayman?
qo'shib qo'ydi muallif Wayneio, manba
ES6 parchasi bilan va eng so'nggi JSON tuzilishingiz bilan javobni yangiladim
qo'shib qo'ydi muallif Mirko Vukušić, manba
@Wayneio, men ballar uchun ov qilmayman, shuning uchun sizda :) Lekin agar siz "filtr" yechimiga ishonsangiz, iltimos, agar u ishlayotgan bo'lsa, hodisalar echimlari bir xil emas. Filtr - bu ES5 (ES6-dan foydalana olmaysiz) afzalligi. Bundan tashqari, qatorni (bir element emas) qaytara olishi mumkin, chunki u barcha narsalarni topadi, chunki topilmaning birinchi turi emas. Bu sizning ishingizga bog'liq holda yaxshi yoki yomon bo'lishi mumkin. Agar siz faqat bitta kerak bo'lsa, u holda filtr% 86 sekinroq (shubhasiz, birinchi element to'g'ri kelganda qidirishni to'xtatmaydi). benchmark: jsbench.me/r8izihgj9w/1
qo'shib qo'ydi muallif Mirko Vukušić, manba
@Wayneio ES6ni o'rganishda bo'lgani kabi ES5 haqida etarlicha bilimga ega bo'lsangiz, men "ES6" dagi yangi narsalarni bu yerda ko'rib chiqaman: es6-features.org
qo'shib qo'ydi muallif Mirko Vukušić, manba

Boshqa echimlar bilan bir qatorda Array # some , maxsus kalit va qiymat uchun murdalariga ega bo'lgan qatorni tomosha qilish funktsiyasida erta qaytish uchun.

Funktsiya istalgan naqshga mos keladigan birinchi obyektni qaytaradi.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function getObject(array, key, value) {
    var object;
    array.some(function (o) {
        if (o[key] === value) {
            object = o;
            return true;
        }
    });
    return object;
}

var data = [{ workflowId: 1, stepId: 1, workflowTypeId: 4, baseFieldId: 3, relatedFieldId: 0, relatedValue: "yes", nextTrueStepId: 2, nextFalseStepId: 4 }, { workflowId: 1, stepId: 2, workflowTypeId: 2, baseFieldId: 4, relatedFieldId: 0, relatedValue: 0, nextTrueStepId: 3, nextFalseStepId: 4 }, { workflowId: 1, stepId: 3, workflowTypeId: 9, baseFieldId: 1, relatedFieldId: 0, relatedValue: "SUBMITTED", nextTrueStepId: 4, nextFalseStepId: 0 }];

console.log(getObject(data, 'nextTrueStepId', 3));
</div> </div>
0
qo'shib qo'ydi

ES5 versiyasini qo'shib qo'ydim, ularni qayta ishlatadigan funksiyalarga o'stirib, keyin ijro tezligini sinab ko'rdim (faqat funktsiyani e'lon qilish mezondan tashqarida, JS-da).

Latest version, ES5 for loop is way fastest too. More code to write and less readable though. Benchmark: https://jsbench.me/r8izihgj9w/2

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var input = [{
  "workflowId": 1,
  "stepId": 1,
  "workflowTypeId": 4,
  "baseFieldId": 3,
  "relatedFieldId": 0,
  "relatedValue": "yes",
  "nextTrueStepId": 2,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 2,
  "workflowTypeId": 2,
  "baseFieldId": 4,
  "relatedFieldId": 0,
  "relatedValue": "",
  "nextTrueStepId": 3,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 3,
  "workflowTypeId": 9,
  "baseFieldId": 1,
  "relatedFieldId": 0,
  "relatedValue": "SUBMITTED",
  "nextTrueStepId": 4,
  "nextFalseStepId": 0
}]

function findItem3(x) {
        for (i=input.length-1; i>=0; i--) {
                if (input[i].nextTrueStepId === 3) return input[i]
        }
        return {}
}

function findItem2(x) {
  return input.find(item => item.nextTrueStepId === x)
}

function findItem1(x) {
  return input.filter(function(elem){
      return elem.nextTrueStepId===x;
  })
}

console.log(findItem1(3))
console.log(findItem2(3))
console.log(findItem3(3))
</div> </div>
0
qo'shib qo'ydi

ES5 versiyasini qo'shib qo'ydim, ularni qayta ishlatadigan funksiyalarga o'stirib, keyin ijro tezligini sinab ko'rdim (faqat funktsiyani e'lon qilish mezondan tashqarida, JS-da).

Latest version, ES5 for loop is way fastest too. More code to write and less readable though. Benchmark: https://jsbench.me/r8izihgj9w/2

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var input = [{
  "workflowId": 1,
  "stepId": 1,
  "workflowTypeId": 4,
  "baseFieldId": 3,
  "relatedFieldId": 0,
  "relatedValue": "yes",
  "nextTrueStepId": 2,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 2,
  "workflowTypeId": 2,
  "baseFieldId": 4,
  "relatedFieldId": 0,
  "relatedValue": "",
  "nextTrueStepId": 3,
  "nextFalseStepId": 4
}, {
  "workflowId": 1,
  "stepId": 3,
  "workflowTypeId": 9,
  "baseFieldId": 1,
  "relatedFieldId": 0,
  "relatedValue": "SUBMITTED",
  "nextTrueStepId": 4,
  "nextFalseStepId": 0
}]

function findItem3(x) {
        for (i=input.length-1; i>=0; i--) {
                if (input[i].nextTrueStepId === 3) return input[i]
        }
        return {}
}

function findItem2(x) {
  return input.find(item => item.nextTrueStepId === x)
}

function findItem1(x) {
  return input.filter(function(elem){
      return elem.nextTrueStepId===x;
  })
}

console.log(findItem1(3))
console.log(findItem2(3))
console.log(findItem3(3))
</div> </div>
0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb