অ্যারে থেকে কোনও অবজেক্ট সন্ধান এবং ফিরিয়ে আনতে লড্যাশ কীভাবে ব্যবহার করবেন?


148

আমার অবজেক্টস:

[
    {
        description: 'object1', id: 1
    },
    {
        description: 'object2', id: 2
    }
    {
        description: 'object3', id: 3
    }
    {
        description: 'object4', id: 4
    }
]

নীচের আমার ফাংশনে আমি বর্ণনার সাথে মিলে যাচ্ছি ম্যাচিং আইডিটি খুঁজতে:

function pluckSavedView(action, view) {
    console.log('action: ', action);
    console.log('pluckSavedView: ', view);  // view = 'object1'

    var savedViews = retrieveSavedViews();
    console.log('savedViews: ', savedViews);

    if (action === 'delete') {
        var delete_id = _.result(_.find(savedViews, function(description) {
            return description === view;
        }), 'id');

        console.log('delete_id: ', delete_id); // should be '1', but is undefined
    }
}

আমি লোডাশের সন্ধানের পদ্ধতিটি ব্যবহার করার চেষ্টা করছি: https://lodash.com/docs#find

তবে আমার পরিবর্তনশীল অপরিবর্তিত delete_idআসছে।


এই প্রশ্নটি যাচাই করা লোকদের জন্য আপডেট করুন , রমদা লোডাশের মতো একই কাজটি করার জন্য একটি দুর্দান্ত পাঠাগার, তবে আরও কার্যকরী প্রোগ্রামিংয়ের উপায়ে :) http://ramdajs.com/0.21.0/docs/


1
আমার কাছে এটি স্পষ্ট নয় যে আপনি কেন ভাবেন _.findযে যাদুকরীভাবে কেবলমাত্র বৈশিষ্ট্যগুলির মধ্যে একটিকে কলব্যাকে স্থানান্তর করবেন। console.log(description)কলব্যাকের একটি সাধারণ আপনাকে এটি বলতে পারত।
ফেলিক্স ক্লিং

উত্তর:


176

কলব্যাকটিতে আর্গুমেন্টটি অ্যারের অন্যতম উপাদান। আপনার অ্যারের উপাদানগুলি ফর্মের অবজেক্ট {description: ..., id: ...}

var delete_id = _.result(_.find(savedViews, function(obj) {
    return obj.description === view;
}), 'id');

ডকসগুলির সাথে অন্য একটি বিকল্প যা আপনি লিড করেছেন (লোড্যাশ ভি 3):

_.find(savedViews, 'description', view);

লোডাশ ভি 4:

_.find(savedViews, ['description', view]);

4
ধন্যবাদ! আমি সবেমাত্র জানতে পেরেছিলাম যে এটি খুব বেশি কাজ করে var delete_id = _.result(_.find(savedViews, { 'description': view }), 'id');আরও 10 মিনিট ...
লিওন গাবান

দ্বিতীয় সমাধান ভুল, বিধেয় matchesProperty সাধারণভাবে সংক্ষেপে ব্যবহার করার জন্য একটি অ্যারের হতে হবে: এটি হওয়া উচিত_.find(savedViews, ['description', view])
franksands

1
@ ফ্রেঞ্চিসকো গুয়ামেরেস: ঠিক আছে, ২০১৫ সালে, লোডাশ এইভাবে কীভাবে কাজ করেছিল: লডাশ.com
ফেলিক্স ক্লিং

1
@ ফেলিক্সকলিং আমি সন্দেহ করেছিলাম এটি এমন কিছু হতে পারে তবে 2018 সালে উত্তর খুঁজছেন (আমার মত) লোকদের জন্য একটি মন্তব্য যুক্ত করা ভাল বলে মনে করেছেন the উত্তরের আপডেটের জন্য ধন্যবাদ
ফ্র্যাঙ্কস্যান্ডস


29

আপনি ভ্যানিলা জেএস এ এটি সহজেই করতে পারেন:

ব্যবহার find

const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];

const view = 'object2';

const delete_id = savedViews.find(obj => {
  return obj.description === view;
}).id;

console.log(delete_id);

ব্যবহার filter(মূল উত্তর)

const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];

const view = 'object2';

const delete_id = savedViews.filter(function (el) {
  return el.description === view;
})[0].id;

console.log(delete_id);


6
সত্য, তবে লোডাশকে অনেক পরিষ্কার মনে হচ্ছে, ডেমোটির জন্য [0]আমি var delete_id = _.result(_.find(savedViews, { 'description': view }), 'id');ধন্যবাদ সাথে যাচ্ছি এটিই আমার সমাধান করতে হবে না +1
লিওন গাবান

আপনি যখন [0] কে একটি খালি ফলাফল জোর করে বলছেন তখন কি এটি ব্যর্থ হচ্ছে না? সুতরাং লিওনগাবানকে +1 করতে যে লোডাশটি ডিফল্টরূপে এটি পরিচালনা করতে পারে।
কিরাদোটি

3
@ লিওনগাবান এখনও আপনি ইএস using ব্যবহার না করে লোডাশ ছাড়াই ক্লিনার ব্যবহার করতে পারেন savedViews.find(el => el.description === view)
রাম বাবু এস

দুর্দান্ত উত্তর !!
ওলে

11

সঙ্গে findপদ্ধতি, আপনার কলব্যাক, প্রতিটি উপাদান এর মান পাশ করা মত যাচ্ছে:

{
    description: 'object1', id: 1
}

সুতরাং, আপনি কোড চান:

_.find(savedViews, function(o) {
        return o.description === view;
})

8

এটির জন্য একটি অ্যারেতে প্রদত্ত অবজেক্টটি খুঁজে বার করুন, _.ফাইন্ডের প্রাথমিক ব্যবহারের উদাহরণ

const array = 
[
{
    description: 'object1', id: 1
},
{
    description: 'object2', id: 2
},
{
    description: 'object3', id: 3
},
{
    description: 'object4', id: 4
}
];

এই ভাল কাজ করবে

q = _.find(array, {id:'4'}); // delete id

console.log(q); // {description: 'object4', id: 4}

_.ফাইন্ডটি সূচকের পরিবর্তে অ্যারেতে কোনও উপাদান ফেরত দিতে সহায়তা করবে। সুতরাং যদি আপনার কাছে অবজেক্টগুলির একটি অ্যারে থাকে এবং আপনি অ্যারেতে একটি নির্দিষ্ট কী মান পেরেকে একটি জিনিস খুঁজে পেতে চান _ _ ফাইন্ড হ'ল কাজের জন্য উপযুক্ত সরঞ্জাম।


7

আপনার লোডাশ বা রামদা বা অন্য কোনও অতিরিক্ত নির্ভরতা দরকার নেই।

কেবল ES6 ফাইন্ড () ফাংশনটি কার্যকরী উপায়ে ব্যবহার করুন:

savedViews.find(el => el.description === view)

কখনও কখনও আপনার সাথে আসা সমস্ত গুডিগুলি পেতে আপনার তৃতীয় পক্ষের গ্রন্থাগারগুলি ব্যবহার করা প্রয়োজন। তবে, সাধারণত বলতে গেলে, যখন আপনার প্রয়োজন হয় না তখন নির্ভরতা এড়ানো চেষ্টা করুন । নির্ভরতাগুলি:

  • আপনার বান্ডিল কোডের আকারটি ফুটিয়ে তুলুন,
  • আপনি তাদের আপ টু ডেট রাখতে হবে,
  • এবং তারা বাগ বা সুরক্ষা ঝুঁকি প্রবর্তন করতে পারে

দুর্দান্ত উত্তর !! ঠিক আমি খুঁজছেন ছিল কি.
ওলে


6

আপনি নিম্নলিখিত ব্যবহার করতে পারেন

import { find } from 'lodash'

তারপরে নীচের তালিকা সহ পুরো বস্তুটি (কেবল এটির কী বা মান নয়) ফিরিয়ে আনতে:

let match = find(savedViews, { 'ID': 'id to match'});

4

lodashব্যবহার করে আমদানি করুন

। npm আমি - সেভ লোডাশ

var _ = require('lodash'); 

var objArrayList = 
    [
         { name: "user1"},
         { name: "user2"}, 
         { name: "user2"}
    ];

var Obj = _.find(objArrayList, { name: "user2" });

// Obj ==> { name: "user2"}

আরও বিশদ যুক্ত করুন
কিং স্টোন

1

নামের উপর ভিত্তি করে আইডি আনুন

 {
    "roles": [
     {
      "id": 1,
      "name": "admin",
     },
     {
      "id": 3,
      "name": "manager",
     }
    ]
    }



    fetchIdBasingOnRole() {
          const self = this;
          if (this.employee.roles) {
            var roleid = _.result(
              _.find(this.getRoles, function(obj) {
                return obj.name === self.employee.roles;
              }),
              "id"
            );
          }
          return roleid;
        },
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.