জাভাস্ক্রিপ্ট বা jQuery ব্যবহার করে কোন অ্যারের ভিতরে থাকা অবজেক্টের মান কীভাবে পরিবর্তন করবেন?


200

নীচের কোডটি jQuery UI স্বতঃপূরণ থেকে এসেছে:

var projects = [
    {
        value: "jquery",
        label: "jQuery",
        desc: "the write less, do more, JavaScript library",
        icon: "jquery_32x32.png"
    },
    {
        value: "jquery-ui",
        label: "jQuery UI",
        desc: "the official user interface library for jQuery",
        icon: "jqueryui_32x32.png"
    },
    {
        value: "sizzlejs",
        label: "Sizzle JS",
        desc: "a pure-JavaScript CSS selector engine",
        icon: "sizzlejs_32x32.png"
    }
];

উদাহরণস্বরূপ, আমি jquery-ui এর ডেস্ক মানটি পরিবর্তন করতে চাই । আমি এটা কিভাবে করবো?

অতিরিক্তভাবে, ডেটা পাওয়ার কোনও দ্রুত উপায় আছে? আমি বোঝাতে চাইছি কোনও অ্যারের ভিতরে থাকা অবজেক্টের মতোই, বস্তুটিকে তার ডেটা আনতে একটি নাম দিন? সুতরাং এটি কিছু হবেjquery-ui.jquery-ui.desc = ....


সিনট্যাক্সটি ব্যবহার করার জন্য আপনাকে অ্যারেটিকে জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তর করতে হবে projects["jquery-ui"].desc। কেবলমাত্র সুন্দর সিনট্যাক্স পাওয়ার জন্য কি সেই প্রচেষ্টাটি মূল্যবান হবে?
ফ্রেডরিক হামিদি

আমি আপনার সর্বশেষ প্রশ্নের সাথে আমার সমাধান আপডেট করেছি। এবং আপনি "پروژې.জকোয়ারি-ইউআইডিএসসি" স্বরলিপি ব্যবহার করতে পারেন।
অ্যাস্টন

উত্তর:


135

আপনাকে অ্যারেতে অনুসন্ধান করতে হবে:

function changeDesc( value, desc ) {
   for (var i in projects) {
     if (projects[i].value == value) {
        projects[i].desc = desc;
        break; //Stop this loop, we found it!
     }
   }
}

এবং এটি পছন্দ করুন

var projects = [ ... ];
changeDesc ( 'jquery-ui', 'new description' );

হালনাগাদ:

এটি দ্রুত পেতে:

var projects = {
   jqueryUi : {
      value:  'lol1',
      desc:   'lol2'
   }
};

projects.jqueryUi.desc = 'new string';

(ফ্রেডরিকের ভাষ্য অনুসারে আপনাকে অবজেক্ট কীতে হাইফেন ব্যবহার করা উচিত নয়, বা আপনার "জ্যাকুয়ারি-ইউআই" এবং প্রকল্পগুলি ["জ্যাকুয়ারি-ইউআই"] স্বরলিপি ব্যবহার করা উচিত))


ডেটা পাওয়ার আরও কি দ্রুত উপায় আছে? এর অর্থ হ'ল অবজেক্টটির ডেটা আনার জন্য একটি নাম দিন ar অ্যারের ভিতরে থাকা অবজেক্টের মতোই that সুতরাং, আমি কি সেভাবে ব্যবহার করতে পারি: jquery-ui.jquery-ui.desc = ....
qinHaiXiang

2
আপনার আপডেটটি -বস্তুর নামে হাইফেনের কারণে কাজ করবে না । আপনি লিখতে হবে "jquery-ui": {}এবং projects["jquery-ui"].descযথাক্রমে।
ফ্রিডরিক হামিদি

আপনাকে ধন্যবাদ, আমি এটি জানতাম না।
অ্যাস্টন

আবে kur এর উত্তর, সেটা ঠিক তাকান, এটি এবং anothers দীর্ঘ
stackdave

230

এটা বেশ সহজ

  • findIndexপদ্ধতিটি ব্যবহার করে অবজেক্টের সূচকটি সন্ধান করুন ।
  • সূচকটি ভেরিয়েবলে সঞ্চয় করুন।
  • এর মতো একটি সাধারণ আপডেট করুন: yourArray[indexThatyouFind]

//Initailize array of objects.
let myArray = [
  {id: 0, name: "Jhon"},
  {id: 1, name: "Sara"},
  {id: 2, name: "Domnic"},
  {id: 3, name: "Bravo"}
],
    
//Find index of specific object using findIndex method.    
objIndex = myArray.findIndex((obj => obj.id == 1));

//Log object to Console.
console.log("Before update: ", myArray[objIndex])

//Update object's name property.
myArray[objIndex].name = "Laila"

//Log object to console again.
console.log("After update: ", myArray[objIndex])


2
ডবল জন্য কোন কারণে ()উপর findIndexপদ্ধতি?
তেরখোস

3
এটি আমারআরে পরিবর্তন করবে।
বিমল গ্রাগ

1
হ্যাঁ, তবে আপনি যদি পরিবর্তন করতে চান না। [...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], myArray.slice(objIndex + 1))]
উমাইর আহমেদ

1
@ উমাইর আহমাদ উপরের কোডটি হওয়া উচিত [...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], ...myArray.slice(objIndex + 1))]? আমি মনে করি আপনি দ্বিতীয় উপবৃত্ত অনুপস্থিত।
ক্রেগ

1
ভালবাসি এই কত পরিষ্কার!
tdelam

56

ES6 উপায়, আসল ডেটা পরিবর্তন না করে।

var projects = [
{
    value: "jquery",
    label: "jQuery",
    desc: "the write less, do more, JavaScript library",
    icon: "jquery_32x32.png"
},
{
    value: "jquery-ui",
    label: "jQuery UI",
    desc: "the official user interface library for jQuery",
    icon: "jqueryui_32x32.png"
}];

//find the index of object from array that you want to update
const objIndex = projects.findIndex(obj => obj.value === 'jquery-ui');

// make new object of updated object.   
const updatedObj = { ...projects[objIndex], desc: 'updated desc value'};

// make final new array of objects by combining updated object.
const updatedProjects = [
  ...projects.slice(0, objIndex),
  updatedObj,
  ...projects.slice(objIndex + 1),
];

console.log("original data=", projects);
console.log("updated data=", updatedProjects);

54

সেরা সমাধান, ES6 ধন্যবাদ।

এটি "jquery-ui" সমান মান ধারণ করে এমন অবজেক্টটির জন্য প্রতিস্থাপিত বিবরণ সহ একটি নতুন অ্যারে প্রদান করে।

const newProjects = projects.map(p =>
  p.value === 'jquery-ui'
    ? { ...p, desc: 'new description' }
    : p
);

1
সত্যিই সেরা আসল সমাধান! ধন্যবাদ।
ফ্রেডেরিকো সিজার

1
@ ফ্রেডেরিকোসেসার সব ক্ষেত্রেই নয়, প্রতিটি বস্তুর উপর পুনরাবৃত্তি করতে অ্যারের
টুকরো টুকরো

আপনি যদি উড়ে মান পরিবর্তন করতে চান? আর একটি ভার তৈরি না করে? সর্বোত্তম উপায় হ'ল সূচি পদ্ধতি: কনস্ট টার্গেটইন্ডেক্স = গ্রীষ্মকালীন ফলস.ফিন্ড ইন্ডেক্স (f => f.id === 3);
থানাসিস

37

আপনি অ্যারেতে পুনরাবৃত্তি করতে এবং আপনার আগ্রহী অবজেক্টটি সনাক্ত করতে $ .each () ব্যবহার করতে পারেন :

$.each(projects, function() {
    if (this.value == "jquery-ui") {
        this.desc = "Your new description";
    }
});

34

অতিরিক্ত লাইব্রেরি ব্যবহার না করে মানচিত্র ব্যবহার করা সবচেয়ে ভাল সমাধান ((ES6 ব্যবহার করে)

const state = [
{
    userId: 1,
    id: 100,
    title: "delectus aut autem",
    completed: false
},
{
    userId: 1,
    id: 101,
    title: "quis ut nam facilis et officia qui",
    completed: false
},
{
    userId: 1,
    id: 102,
    title: "fugiat veniam minus",
    completed: false
},
{
    userId: 1,
    id: 103,
    title: "et porro tempora",
    completed: true
}]

const newState = state.map(obj =>
    obj.id === "101" ? { ...obj, completed: true } : obj
);

19

এটি আন্ডারস্কোর / লড্যাশ লাইব্রেরিতে সহজেই সম্পাদন করা যায়:

  _.chain(projects)
   .find({value:"jquery-ui"})
   .merge({desc: "new desc"});

দস্তাবেজ:
https://lodash.com/docs#find
https://lodash.com/docs# विसর


'Jquery-ui' ফাইন্ড ফাংশনটি না পাওয়া গেলে কী হবে?
মিকা 12

'লোড্যাশএক্সপ্লিফিকআরাইয়ের্পার' টাইপ করে সম্পত্তি 'সন্ধান' বিদ্যমান নেই
অ্যান্ড্রুবেজামিন

এই ধরণের ক্রমগুলির ফলাফল অবশ্যই _ # মান সহ মোড়ানো উচিত। লড্যাশ.com .value()
৪.১7.৪

17

আপনি উদাহরণে ব্যবহার করতে পারেন

   var projects = [
            {
                value: "jquery",
                label: "jQuery",
                desc: "the write less, do more, JavaScript library",
                icon: "jquery_32x32.png"
            },
            {
                value: "jquery-ui",
                label: "jQuery UI",
                desc: "the official user interface library for jQuery",
                icon: "jqueryui_32x32.png"
            },
            {
                value: "sizzlejs",
                label: "Sizzle JS",
                desc: "a pure-JavaScript CSS selector engine",
                icon: "sizzlejs_32x32.png"
            }
        ];

let project = projects.find((p) => {
    return p.value === 'jquery-ui';
});

project.desc = 'your value'

অ্যামেজিং! +1
মাইক মুসনি 11'19

12

আপনি যে অবজেক্টটি পরিবর্তন করছেন তার সূচি জানতে হবে। তারপর এটি বেশ সহজ

projects[1].desc= "new string";

8

আমি মনে করি এই উপায়টি আরও ভাল

const index = projects.findIndex(project => project.value==='jquery-ui');
projects[index].desc = "updated desc";

আপনার findIndexআপনি একটি মান বরাদ্দ করছি পরিবর্তে তুলনা
avalanche1

6

নিম্নলিখিত ডেটা দেওয়া, আমরা প্রতিস্থাপন করতে চান বেরি মধ্যে summerFruitsদিয়ে তালিকা তরমুজ

const summerFruits = [
{id:1,name:'apple'}, 
{id:2, name:'orange'}, 
{id:3, name: 'berries'}];

const fruit = {id:3, name: 'watermelon'};

দুটি উপায় আপনি এটি করতে পারেন।

প্রথম পদ্ধতির:

//create a copy of summer fruits.
const summerFruitsCopy = [...summerFruits];

//find index of item to be replaced
const targetIndex = summerFruits.findIndex(f=>f.id===3); 

//replace the object with a new one.
summerFruitsCopy[targetIndex] = fruit;

দ্বিতীয় পদ্ধতি: ব্যবহার mapএবং spread:

const summerFruitsCopy = summerFruits.map(fruitItem => 
fruitItem .id === fruit.id ? 
    {...summerFruits, ...fruit} : fruitItem );

summerFruitsCopy তালিকাটি এখন আপডেট হওয়া অবজেক্টের সাথে একটি অ্যারের ফিরিয়ে দেবে।


প্রথম পদ্ধতিটি সবচেয়ে ভাল। অন্য ভারে এবং তারপরে ফিরে যাওয়ার দরকার নেই। উড়ানোর পদ্ধতিতে। আমি আপ আপনার সমাধান ভোট দিয়েছি।
থানাসিস

4

// using higher-order functions to avoiding mutation
var projects = [
            {
                value: "jquery",
                label: "jQuery",
                desc: "the write less, do more, JavaScript library",
                icon: "jquery_32x32.png"
            },
            {
                value: "jquery-ui",
                label: "jQuery UI",
                desc: "the official user interface library for jQuery",
                icon: "jqueryui_32x32.png"
            },
            {
                value: "sizzlejs",
                label: "Sizzle JS",
                desc: "a pure-JavaScript CSS selector engine",
                icon: "sizzlejs_32x32.png"
            }
        ];

// using higher-order functions to avoiding mutation
index = projects.findIndex(x => x.value === 'jquery-ui');
[... projects.slice(0,index), {'x': 'xxxx'}, ...projects.slice(index + 1, projects.length)];


এই ...প্রকল্পের প্রয়োজন আগে?
lazzy_ms

@ লাজি_এমএস ...স্প্রেড অপারেটর হিসাবে পরিচিত। গুগল
ইট

4

এটি জড়িত অন্য উত্তর find। এটি নির্ভর করে যে find:

  • অ্যারেতে প্রতিটি অবজেক্টের মাধ্যমে পুনরাবৃত্তি হয় ততক্ষণ একটি মিল পাওয়া যায়
  • প্রতিটি বস্তু আপনাকে সরবরাহ করা হয় এবং মোডেফাইএবল

এখানে সমালোচনামূলক জাভাস্ক্রিপ্ট স্নিপেট:

projects.find( function (p) {
    if (p.value !== 'jquery-ui') return false;
    p.desc = 'your value';
    return true;
} );

এখানে একই জাভাস্ক্রিপ্টের একটি বিকল্প সংস্করণ রয়েছে:

projects.find( function (p) {
    if (p.value === 'jquery-ui') {
        p.desc = 'your value';
        return true;
    }
    return false;
} );

এখানে একটি আরও ছোট (এবং কিছুটা আরও খারাপ সংস্করণ):

projects.find( p => p.value === 'jquery-ui' && ( p.desc = 'your value', true ) );

এখানে একটি সম্পূর্ণ কার্যকারী সংস্করণ:

  var projects = [
            {
                value: "jquery",
                label: "jQuery",
                desc: "the write less, do more, JavaScript library",
                icon: "jquery_32x32.png"
            },
            {
                value: "jquery-ui",
                label: "jQuery UI",
                desc: "the official user interface library for jQuery",
                icon: "jqueryui_32x32.png"
            },
            {
                value: "sizzlejs",
                label: "Sizzle JS",
                desc: "a pure-JavaScript CSS selector engine",
                icon: "sizzlejs_32x32.png"
            }
        ];

projects.find( p => p.value === 'jquery-ui' && ( p.desc = 'your value', true ) );

console.log( JSON.stringify( projects, undefined, 2 ) );


3

আপনি মানচিত্রের ফাংশন ব্যবহার করতে পারেন -

const answers = this.state.answers.map(answer => {
  if(answer.id === id) return { id: id, value: e.target.value }
  return answer
})

this.setState({ answers: answers })


0

জাভাস্ক্রিপ্ট ব্যবহার করে অ্যারের অবজেক্টটি সংশোধন করতে আমরা অ্যারের মানচিত্র ফাংশনটিও ব্যবহার করতে পারি।

function changeDesc(value, desc){
   projects.map((project) => project.value == value ? project.desc = desc : null)
}

changeDesc('jquery', 'new description')

এটি ফিরে আসবে [শূন্য, আপডেট মান দিয়ে আপত্তি, নাল]
ফার্নান্দো ক্যারাইড

0

প্রথমে সূচকটি সন্ধান করুন:

function getIndex(array, key, value) {
        var found = false;
        var i = 0;
        while (i<array.length && !found) {
          if (array[i][key]==value) {
            found = true;
            return i;
          }
          i++;
        }
      }

তারপর:

console.log(getIndex($scope.rides, "_id", id));

তারপরে আপনি যা চান তা এই সূচকের সাথে করুন, যেমন:

$ সুযোগ [retindindex] .someKey = "someValue";

দ্রষ্টব্য: দয়া করে এর জন্য ব্যবহার করবেন না, যেহেতু সমস্ত অ্যারে নথিগুলি যাচাই করবে, স্টপারের সাথে ব্যবহার করার জন্য, সুতরাং এটি একবারে খুঁজে পাওয়া গেলে এটি দ্রুত বন্ধ হয়ে যাবে।


0

এখানে আমি কৌনিক জেএস ব্যবহার করছি। জাভাস্ক্রিপ্টে আপনি লুপের জন্য এটি ব্যবহার করতে পারেন।

    if($scope.bechval>0 &&$scope.bechval!=undefined)
    {

                angular.forEach($scope.model.benhmarkghamlest, function (val, key) {
                $scope.model.benhmarkghamlest[key].bechval = $scope.bechval;

            });
    }
    else {
        alert("Please sepecify Bechmark value");
    }

-1

ম্যাচগুলি ব্যবহার করে একাধিক আইটেম আপডেট করতে:

_.chain(projects).map(item => {
      item.desc = item.value === "jquery-ui" ? "new desc" : item.desc;
      return item;
    })

-1

এটিই আমার প্রতিক্রিয়া। আমার আন্ডারস্কোর সংস্করণটি 1.7 ছিল তাই আমি ব্যবহার করতে পারি না .findIndex

সুতরাং আমি ম্যানুয়ালি আইটেমের সূচক পেয়েছি এবং এটি প্রতিস্থাপন করেছি। এখানে একই জন্য কোড।

 var students = [ 
{id:1,fName:"Ajay", lName:"Singh", age:20, sex:"M" },
{id:2,fName:"Raj", lName:"Sharma", age:21, sex:"M" },
{id:3,fName:"Amar", lName:"Verma", age:22, sex:"M" },
{id:4,fName:"Shiv", lName:"Singh", age:22, sex:"M" }
               ]

নীচে পদ্ধতিতে শিক্ষার্থীকে id:4বস্তুর আরও বৈশিষ্ট্য সহ প্রতিস্থাপন করবে

function updateStudent(id) {
 var indexOfRequiredStudent = -1;
    _.each(students,function(student,index) {                    
      if(student.id === id) {                        
           indexOfRequiredStudent = index; return;      
      }});
 students[indexOfRequiredStudent] = _.extend(students[indexOfRequiredStudent],{class:"First Year",branch:"CSE"});           

}

আন্ডারস্কোর 1.8 সহ এটি আমাদের পদ্ধতি হিসাবে সহজ করা হবে _.findIndexOf


-1

আপনি এর মান আপডেট করতে চান array[2] = "data"

    for(i=0;i<array.length;i++){
      if(i == 2){
         array[i] = "data";
        }
    }

এটি একটি উত্তর বা একটি প্রশ্ন?
তাবদিয়োকভ

2
আপনি সবচেয়ে জটিল পদ্ধতিতে সফলভাবে সেই অ্যারেতে 2 য় আইটেমটি আপডেট করেছেন।
ব্লুওয়াটার 86

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