Ob'ektni "lodash" ichidagi ichki xususiyatiga ega qatordan olib tashlash

Bu qator bor:

var myArray = [{state: {name: 'object #1'}},
               {state: {name: 'object #2'}},
               {state: {name: 'object #3'}}];

state.name - 'ob'ekt # 1' ob'ektini lojat bilan olib tashlashga harakat qilaman. Hozir men shunday qilaman:

_.remove(myArray, {
        name: 'object #1'
    });

Lekin u ishlamayapti. Dastlab men uni shunday qilishni sinab ko'rdim, bu men uchun buni amalga oshirishning eng aniq yo'li:

_.remove(myArray, {
        state.name: 'object #1'
    });

Lekin bu ham ishlamadi, va mening validatorim bu erda nuqta belgilaridan shikoyat qildi.

Buni lodashda qanday qilasiz?

0
@arielcr Asl savolda aytilganidek, mavjud elementdan elementni olib tashlash kerakmi? "Narsadan biriktirilgan xususiyatga ega ob'ektni olib tashlash" yoki yangi qatorda muayyan elementlarning mavjud bo'lmagan yangi qatorini yaratish kerakmi?
qo'shib qo'ydi muallif guest271314, manba
@arielcr Agar elementdan elementni olib tashlash uchun Array.prototype.splice() dan foydalanishingiz mumkin.
qo'shib qo'ydi muallif guest271314, manba
Sizga aniq JS echimiga ega bo'lgan javobni taqdim qildim. Hatto ikki echim.
qo'shib qo'ydi muallif kind user, manba
Chunki JSda: {}! == {} !
qo'shib qo'ydi muallif ibrahim mahrir, manba
@ guest271314 fikrni qatordan elementni olib tashlashdir
qo'shib qo'ydi muallif arielcr, manba

6 javoblar

_.remove takes a predicate function. You can do it this way:

_.remove(myArray, function(arg) {
    return arg.name == 'object #1';
});
3
qo'shib qo'ydi
Rahmat @ibrahimmahrir!
qo'shib qo'ydi muallif Marii, manba
O'rnatish funktsiyasi nimani qaytarishi kerak! Sizning holatingizda barcha elementlar uchun qaytib kelgan qiymat undefined bo'ladi, ya'ni uning barcha elementlari olib tashlanganidan keyin qator bo'sh bo'ladi!
qo'shib qo'ydi muallif ibrahim mahrir, manba

Array # filter dan foydalanib, sof jsda.

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

var myArray = [{state: {name: 'object #1'}},
               {state: {name: 'object #2'}},
               {state: {name: 'object #3'}}];

    myArray = myArray.filter(v => v.state.name != 'object #1');
    console.log(myArray);
</div> </div>

yoki Array # forEach dan foydalaning.

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

var myArray = [{state: {name: 'object #1'}},
               {state: {name: 'object #2'}},
               {state: {name: 'object #3'}}],
    newArr = [];
    myArray.forEach(v => v.state.name !== 'object #1' ? newArr.push(v) : null);
    console.log(newArr);
</div> </div>
3
qo'shib qo'ydi
Ishonchning kontekst bilan aloqasi yo'q. Oddiy til aniq. Agar OSh dastlabki savolda matnning aniq ma'nosini moslashtirmoqchi bo'lsa, bu, ehtimol foydali bo'lishi mumkin; Agar zarurat aslida mavjud elementdan elementni olib tashlamasa, ma'lum bir elementsiz yangi qatorni yaratish bilan solishtiriladi. Hozirda matn paydo bo'lganda, talab noaniq emas. Ayblovlar qilmang. Bu erda to'g'ridan-to'g'ri aloqa bilan bog'liq muammolar yo'q. Kelgusida, ehtimol, OP o'ynaydi.
qo'shib qo'ydi muallif guest271314, manba
Asl savolning matni bu erda kuzatib boriladi; x dan ma'lum yni ajratib olib tashlash yangi xni aniq y bo'lmaslikdan farq qiladi.
qo'shib qo'ydi muallif guest271314, manba
Javobda JavaScript ga yondashuvlar mavjud elementdan elementni olib tashlang yoki mavjud qator elementi kiritilmagan yangi qatorni yarating?
qo'shib qo'ydi muallif guest271314, manba
Bu "Oddiy ob'ektdan qatorni o'chirish" ob'ekti OP ning matnida talab kerakmi?
qo'shib qo'ydi muallif guest271314, manba
@ guest271314 Siz u uchun OP so'ragan edingiz, shuning uchun siz bunga ishonchingiz komil emas deb o'ylayman ... O'shanda OP javobini kutib turing, lekin iltimos jaholat uchun meni ayblamang ...
qo'shib qo'ydi muallif kind user, manba
@ guest271314 Bu aniq aniq emas. Ob'ektni mutatsiyaga uchratsiz yoki yo'q qilib tashlashingiz mumkin.
qo'shib qo'ydi muallif kind user, manba
@ guest271314 Ha, bu haqda o'ylay boshladim, lekin original objni o'zgartirish juda yaxshi fikr ekanligiga amin emasman: C
qo'shib qo'ydi muallif kind user, manba

If requirement is to remove an element from an existing array, you can use Array.prototype.splice(), Array.prototype.findIndex()

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

var myArray = [{state: {name: 'object #1'}},
               {state: {name: 'object #2'}},
               {state: {name: 'object #3'}}];

myArray.splice(myArray.findIndex(({state:{name}}) => name === "object #1"), 1);

console.log(myArray);
</div> </div>
2
qo'shib qo'ydi

Siz rad qilish uchun matchProperty qisqartmasi.

var result = _.reject(myArray, ['state.name', 'object #1']);

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

var myArray = [{
    state: {
      name: 'object #1'
    }
  },
  {
    state: {
      name: 'object #2'
    }
  },
  {
    state: {
      name: 'object #3'
    }
  }
];

var result = _.reject(myArray, ['state.name', 'object #1']);

console.log(result);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
</div> </div>
2
qo'shib qo'ydi
Afsuski remove @AdamBoduch qatori mutatsiyaga uchraydi, lekin rad etish yo'q.
qo'shib qo'ydi muallif ryeballar, manba
Xuddi shu steno remove() bilan ishlaydi.
qo'shib qo'ydi muallif Adam Boduch, manba
Siz bilan butunlay rozi bo'lasiz. Mumkin emaslik uchun rad() ni ishlataman. remove() bu savolga javob beradigan narsa edi.
qo'shib qo'ydi muallif Adam Boduch, manba

Quyidagi kabi _. :

_.remove(myArray, function(o) {
    return o.name === 'object #1';
});

yoki yaqinda o'q funksiyalarini dan foydalaning:

_.remove(myArray, o => o.name === 'object #1');
1
qo'shib qo'ydi

Nima uchun Jodugar rejasida buni amalga oshirishingiz mumkin?

myArray = myArray.filter(function(element) {
  return element.state.name !== 'object #1';
})
1
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