জাভাস্ক্রিপ্ট দিয়ে একটি অ্যারেতে কোনও আইটেম কীভাবে প্রতিস্থাপন করবেন?


314

এই অ্যারের প্রতিটি আইটেম কিছু সংখ্যক হয়।

var items = Array(523,3452,334,31, ...5346);

আমি নতুন সংখ্যার সাথে অ্যারের সাথে কিছু নম্বর কীভাবে প্রতিস্থাপন করব?

উদাহরণস্বরূপ, আমরা 3410 কে 1010 এর সাথে প্রতিস্থাপন করতে চাই, আমরা এটি কীভাবে করব?


5
3452 এর একাধিক উদাহরণ রয়েছে যা পরিবর্তন করা দরকার, বা কেবল একটি?
মেল্লামোকব

53
একটি উদাহরণ থাকবে, যদি অন্ধকার বাহিনী আরও একটি যোগ না করে।
জেমস

2
যখন স্ট্রিং প্রতিস্থাপন হয় সেখানে replaceঅ্যারেগুলির জন্য কোনও পদ্ধতি নেই কেন ?
লাইফব্লেন্স

উত্তর:


463
var index = items.indexOf(3452);

if (index !== -1) {
    items[index] = 1010;
}

এছাড়াও আপনার অ্যারে আরম্ভ করার জন্য আপনি কনস্ট্রাক্টর পদ্ধতিটি ব্যবহার না করার পরামর্শ দেওয়া হচ্ছে। পরিবর্তে, আক্ষরিক সিনট্যাক্স ব্যবহার করুন:

var items = [523, 3452, 334, 31, 5346];

আপনি ~যদি জাভা স্ক্রিপ্টটি ক্ষতিকারক হয়ে থাকেন এবং -1তুলনাটি ছোট করতে চান তবে আপনি অপারেটরটিও ব্যবহার করতে পারেন :

var index = items.indexOf(3452);

if (~index) {
    items[index] = 1010;
}

কখনও কখনও আমি এমনকি containsএই চেকটি বিমূর্ত করার জন্য একটি ফাংশন লিখতে এবং কী চলছে তা বুঝতে আরও সহজ করতে চাই। কী অসাধারণ তা হ'ল এটি অ্যারে এবং স্ট্রিং উভয় ক্ষেত্রেই কাজ করে:

var contains = function (haystack, needle) {
    return !!~haystack.indexOf(needle);
};

// can be used like so now:
if (contains(items, 3452)) {
    // do something else...
}

স্ট্রিংগুলির জন্য ES6 / ES2015 দিয়ে শুরু করে এবং অ্যারেগুলির জন্য ES2016 এর জন্য প্রস্তাবিত, আপনি আরও সহজেই নির্ধারণ করতে পারবেন কোনও উত্সে অন্য মান রয়েছে কিনা:

if (haystack.includes(needle)) {
    // do your thing
}

9
শুধু ভেবেছিলাম আমি একজন ES6 সংস্করণ দিতে চাই contains: var contains = (a, b) => !!~a.indexOf(b): P: P
Florrie

1
@ জোন আপনি দয়া করে অসুবিধাগুলি ব্যাখ্যা করতে পারেন?
কার্ল টেলর

1
@ কার্ল টায়লর এটি খুব মূর্তিমান নয়। আপনি যদি ES2017 ব্যবহার করতে পারেন তবে Array.prototype.includesপরিবর্তে ব্যবহার করুন।
জিওন

1
আমি কি অবজেক্ট উপাদানগুলির সাথে সূচিপত্র ব্যবহার করতে পারি?
ভালরব

2
@ ভ্যালরব নো, তবে আপনি inকোনও বস্তুর কী (যেমন, 'property' in obj) আছে কিনা তা দেখতে ব্যবহার করতে পারেন , বা আপনি কোনও বস্তুর মানগুলি লুপ করতে পারেন Object.values(obj).forEach(value => {})
এলি

95

Array.indexOf()পদ্ধতি প্রথমত প্রতিস্থাপন করবে। প্রতিটি উদাহরণ ব্যবহার করতে Array.map():

a = a.map(function(item) { return item == 3452 ? 1010 : item; });

অবশ্যই, এটি একটি নতুন অ্যারে তৈরি করে। আপনি যদি এটি জায়গায় করতে চান তবে ব্যবহার করুন Array.forEach():

a.forEach(function(item, i) { if (item == 3452) a[i] = 1010; });

7
অন্য কারও জন্য এটি পড়া। উভয় মানচিত্র () এবং forEach () জাভাস্ক্রিপ্ট বিশেষে নতুন সংযোজন এবং কিছু পুরানো ব্রাউজারে উপস্থিত নেই। আপনি যদি সেগুলি ব্যবহার করতে চান তবে আপনাকে পুরানো ব্রাউজারগুলির জন্য সামঞ্জস্যতা কোড যুক্ত করতে হতে পারে: developer.mozilla.org/en/
জাভা স্ক্রিপ্ট

2
Array.indexOf()একই সময়ে চালু করা হয় map()এবং forEach()। আপনি যদি IE8 বা তার আগে সমর্থন করছেন, এবং আপনি সমর্থন যোগ করার জন্য কোনও শিম ব্যবহার করছেন না, মেল্লামবকের উত্তরটি নিয়ে আরও ভাল যান ।
গিলি

অ্যারে.ম্যাপ তাদের দ্বিতীয় প্যারামিটার এ = a.map (ফাংশন (আইটেম, কী) index যদি (আইটেম == 3452) এ [কী] = 1010;;) সূচক ফেরত দেয়;
রিকি শর্মা

38

আমার প্রস্তাবিত সমাধানটি হ'ল:

items.splice(1, 1, 1010);

স্প্লাইস অপারেশনটি 1 আইটেমটিকে সরিয়ে ফেলবে, অ্যারেতে অবস্থিত 1 থেকে শুরু করে (অর্থাত্ 3452) এবং নতুন আইটেমটির সাথে এটি প্রতিস্থাপন করবে 1010


5
এটি বিভ্রান্তিকর হিসাবে আপনি বোঝাচ্ছেন যে প্রথম প্যারামিটারটির অর্থ সেই 1আইটেমটি সরানো হবে যখন প্রথম প্যারামিটারের অর্থ দাঁড়ায় যে ক্রিয়াকলাপ সূচীতে ঘটে 1বিকাশকারী.মোজিলা.অর্গ
en- ইউএস

28

উপাদান খুঁজে পেতে সূচিপত্র ব্যবহার করুন।

var i = items.indexOf(3452);
items[i] = 1010;

1
কি যদি এটি উপাদান প্রত্যাশিত না। যদি এটি পাওয়া যায় তবে এটি পাওয়া যায় এমন উপাদানগুলির সূচক ফিরে আসবে তবে তা -১ এ ফিরে আসবে। এবং এটি -1 এ মান সেট করতে চলেছে। দয়া করে jsbin.com/wugatuwora/edit?js,console দেখুন
সোরখা শেলাকে

23

একটি forলুপ সঙ্গে সহজেই সম্পন্ন ।

for (var i = 0; i < items.length; i++)
    if (items[i] == 3452)
        items[i] = 1010;

9
সহজেই, তবে দক্ষতার সাথে অগত্যা নয়;)
এলি

7
@ এলি: ওপি স্পষ্ট ছিল না যে তারা একটি উদাহরণ বা একাধিক উদাহরণ প্রতিস্থাপন করছে। আমার সমাধান একাধিক উদাহরণ পরিচালনা করে।
মেল্লামোকব

@ ইলি যদি কিছু হয় তবে সমস্ত ঘটনা প্রতিস্থাপনের জন্য পোস্ট করা এটি সবচেয়ে দক্ষ উত্তর হবে
টোবিক

14

আপনি সূচী ব্যবহার করে তালিকার যে কোনও সংখ্যা সম্পাদনা করতে পারেন

উদাহরণ স্বরূপ :

items[0] = 5;
items[5] = 100;

11

যদি কোনও জটিল অবজেক্ট (বা এমনকি সাধারণ কোনও) ব্যবহার করে এবং আপনি এস 6 ব্যবহার করতে পারেন তবে Array.prototype.findIndexএটি ভাল। ওপি'র অ্যারেটির জন্য তারা করতে পারত,

const index = items.findIndex(x => x === 3452)
items[index] = 1010

আরও জটিল বিষয়গুলির জন্য, এটি সত্যই জ্বলজ্বল করে। উদাহরণ স্বরূপ,

const index = 
    items.findIndex(
       x => x.jerseyNumber === 9 && x.school === 'Ohio State'
    )

items[index].lastName = 'Utah'
items[index].firstName = 'Johnny'

6

প্রতিস্থাপন এক লাইনে করা যেতে পারে:

var items = Array(523, 3452, 334, 31, 5346);

items[items.map((e, i) => [i, e]).filter(e => e[1] == 3452)[0][0]] = 1010

console.log(items);

অথবা পুনরায় ব্যবহার করতে একটি ফাংশন তৈরি করুন:

Array.prototype.replace = function(t, v) {
    if (this.indexOf(t)!= -1)
        this[this.map((e, i) => [i, e]).filter(e => e[1] == t)[0][0]] = v;
  };

//Check
var items = Array(523, 3452, 334, 31, 5346);
items.replace(3452, 1010);
console.log(items);


6

ES6 উপায়:

const items = Array(523, 3452, 334, 31, ...5346);

আমরা সমাধানের 3452সাথে প্রতিস্থাপন করতে চাই 1010:

const newItems = items.map(item => item === 3452 ? 1010 : item);

নিশ্চয়, প্রশ্ন অনেক বছর আগে জন্য এবং এখন জন্য আমি শুধু ব্যবহার করতে পছন্দ অপরিবর্তনীয় সমাধান, স্পষ্টভাবে, এটি জন্য সন্ত্রস্ত ReactJS

ঘন ঘন ব্যবহারের জন্য আমি নীচে ফাংশন অফার করি:

const itemReplacer = (array, oldItem, newItem) =>
  array.map(item => item === oldItem ? newItem : item);

4

প্রথম পদ্ধতি

অ্যারের আইটেম প্রতিস্থাপন বা আপডেট করার জন্য কেবল এক লাইনে সেরা উপায়

array.splice(array.indexOf(valueToReplace), 1, newValue)

উদাহরণ:

let items = ['JS', 'PHP', 'RUBY'];

let replacedItem = items.splice(items.indexOf('RUBY'), 1, 'PYTHON')

console.log(replacedItem) //['RUBY']
console.log(items) //['JS', 'PHP', 'PYTHON']

দ্বিতীয় পদ্ধতি

একই অপারেশন করার অন্য একটি সহজ উপায় হ'ল:

items[items.indexOf(oldValue)] = newValue

3

সবচেয়ে সহজ উপায় হ'ল আন্ডারস্কোর এবং মানচিত্রের মতো কিছু লাইব্রেরি ব্যবহার করা ।

var items = Array(523,3452,334,31,...5346);

_.map(items, function(num) {
  return (num == 3452) ? 1010 : num; 
});
=> [523, 1010, 334, 31, ...5346]

2
ধরণের ইচ্ছার লোডাশ / আন্ডারস্কোরটি replaceএখন একটি অ্যারে-সচেতন সরবরাহ করেছে ..._.replace([1, 2, 3], 2, 3);
ড্রোগানস

3

ES6 স্প্রেড অপারেটর এবং .sliceপদ্ধতি ব্যবহার করে তালিকায় উপাদানটিকে প্রতিস্থাপনের অবিচ্ছেদ্য উপায় ।

const arr = ['fir', 'next', 'third'], item = 'next'

const nextArr = [
  ...arr.slice(0, arr.indexOf(item)), 
  'second',
  ...arr.slice(arr.indexOf(item) + 1)
]

যা কাজ করে যাচাই করুন

console.log(arr)     // [ 'fir', 'next', 'third' ]
console.log(nextArr) // ['fir', 'second', 'third']

2
var items = Array(523,3452,334,31,5346);

আপনি যদি মানটি জানেন তবে ব্যবহার করুন,

items[items.indexOf(334)] = 1010;

আপনি যদি জানতে চান যে মানটি উপস্থিত রয়েছে বা না, তবে ব্যবহার করুন,

var point = items.indexOf(334);

if (point !== -1) {
    items[point] = 1010;
}

আপনি যদি জায়গা (অবস্থান) জানেন তবে সরাসরি ব্যবহার করুন,

items[--position] = 1010;

আপনি যদি কয়েকটি উপাদান প্রতিস্থাপন করতে চান এবং আপনি কেবলমাত্র শুরু অবস্থানের অর্থ জানেন তবেই,

items.splice(2, 1, 1010, 1220);

.splice সম্পর্কে আরও জানতে


1
var index = Array.indexOf(Array value);
        if (index > -1) {
          Array.splice(index, 1);
        }

এখান থেকে আপনি অ্যারে থেকে একটি নির্দিষ্ট মান মুছতে পারেন এবং একই সূচকের ভিত্তিতে আপনি অ্যারেতে মান সন্নিবেশ করতে পারেন।

 Array.splice(index, 0, Array value);

1

ভাল কেউ যদি কোনও অ্যারেজকে তার সূচক থেকে কীভাবে প্রতিস্থাপন করতে পারে সে বিষয়ে হস্তক্ষেপ করে, তবে এখানে একটি সমাধান দেওয়া হয়েছে।

এর আইডি দ্বারা অবজেক্টের সূচকটি সন্ধান করুন:

const index = items.map(item => item.id).indexOf(objectId)

অবজেক্ট.স্যাসাইন () পদ্ধতি ব্যবহার করে অবজেক্টটি প্রতিস্থাপন করুন:

Object.assign(items[index], newValue)

1
মোহন মত কাজ !!
মিতেশ শাহ

1

@ গিলি 3 এর উত্তর দুর্দান্ত।

কীভাবে এটি বস্তুর অ্যারের জন্য প্রসারিত করা যায়

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

users = users.map(u => u.id !== editedUser.id ? u : editedUser);

var users = [
{id: 1, firstname: 'John', lastname: 'Sena'},
{id: 2, firstname: 'Serena', lastname: 'Wilham'},
{id: 3, firstname: 'William', lastname: 'Cook'}
];

var editedUser = {id: 2, firstname: 'Big Serena', lastname: 'William'};

users = users.map(u => u.id !== editedUser.id ? u : editedUser);

console.log('users -> ', users);


0

প্রথমে আপনার অ্যারেটিকে আবার লিখুন:

var items = [523,3452,334,31,...5346];

এরপরে, অ্যারেতে থাকা উপাদানটি তার সূচক নম্বর দ্বারা অ্যাক্সেস করুন। সূচকের নম্বর নির্ধারণের সূত্রটি হ'ল:n-1

(n=1)অ্যারেতে প্রথম আইটেমটি প্রতিস্থাপন করতে , লিখুন:

items[0] = Enter Your New Number;

আপনার উদাহরণে, সংখ্যাটি 3452দ্বিতীয় অবস্থানে রয়েছে (n=2)। সুতরাং সূচকটি নির্ধারণের সূচকটি হ'ল 2-1 = 1। তাই প্রতিস্থাপন করতে নিম্নলিখিত কোড লিখতে 3452সঙ্গে 1010:

items[1] = 1010;

0

পুনরায় ব্যবহারযোগ্য ফাংশনটিতে তৈরি করা মৌলিক উত্তরটি এখানে:

function arrayFindReplace(array, findValue, replaceValue){
    while(array.indexOf(findValue) !== -1){
        let index = array.indexOf(findValue);
        array[index] = replaceValue;
    }
}

1
সূচি দিন; যখন ((সূচক = সূচিপত্র (অনুসন্ধানভ্যালু))! == -1) ডাবল সূচক এড়াতে (সন্ধানভ্যালু)
জুয়ান আর

0

আমি লুপগুলির জন্য ব্যবহার করে এবং মূল অ্যারের মাধ্যমে পুনরাবৃত্তি করা এবং ম্যাচিং অ্যারেগুলির অবস্থানগুলি অন্য অ্যারে যুক্ত করে এবং তারপরে সেই অ্যারের মধ্য দিয়ে লুপিং করে এটিকে মূল অ্যারেতে পরিবর্তন করে ফিরলাম, আমি ব্যবহার করেছি এবং তীর ফাংশন কিন্তু একটি নিয়মিত ফাংশন খুব কাজ করবে।

var replace = (arr, replaceThis, WithThis) => {
    if (!Array.isArray(arr)) throw new RangeError("Error");
    var itemSpots = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == replaceThis) itemSpots.push(i);
    }

    for (var i = 0; i < itemSpots.length; i++) {
        arr[itemSpots[i]] = WithThis;
    }

    return arr;
};

0
presentPrompt(id,productqty) {
    let alert = this.forgotCtrl.create({
      title: 'Test',
      inputs: [
        {
          name: 'pickqty',
          placeholder: 'pick quantity'
        },
        {
          name: 'state',
          value: 'verified',
          disabled:true,
          placeholder: 'state',

        }
      ],
      buttons: [
        {
          text: 'Ok',
          role: 'cancel',
          handler: data => {

            console.log('dataaaaname',data.pickqty);
            console.log('dataaaapwd',data.state);


          for (var i = 0; i < this.cottonLists.length; i++){

            if (this.cottonLists[i].id == id){
                this.cottonLists[i].real_stock = data.pickqty;

            }
          }

          for (var i = 0; i < this.cottonLists.length; i++){

            if (this.cottonLists[i].id == id){
              this.cottonLists[i].state = 'verified';   

          }
        }
            //Log object to console again.
            console.log("After update: ", this.cottonLists)
            console.log('Ok clicked');
          }
        },

      ]
    });
    alert.present();
  }

As per your requirement you can change fields and array names.
thats all. Enjoy your coding.

0

সবচেয়ে সহজ উপায় এটি।

var items = Array(523,3452,334,31, 5346);
var replaceWhat = 3452, replaceWith = 1010;
if ( ( i = items.indexOf(replaceWhat) ) >=0 ) items.splice(i, 1, replaceWith);

console.log(items);
>>> (5) [523, 1010, 334, 31, 5346]

সূচীতে পাওয়া আইটেমগুলির জন্য কাজ replaceWhat = 523, replaceWith = 999999করে না সঠিক ফলাফল পাওয়া যায় না
অ্যান্থনি চুং

0

এখানে একটি ওলাইনার। এটি ধরে নিয়েছে আইটেমটি অ্যারেতে থাকবে।

var items = [523, 3452, 334, 31, 5346]
var replace = (arr, oldVal, newVal) => (arr[arr.indexOf(oldVal)] = newVal, arr)
console.log(replace(items, 3452, 1010))


0

আপনি যদি একটি সাধারণ চিনির সিনট্যাক্স অনেলাইনার চান তবে আপনি কেবল পারেন:

(elements = elements.filter(element => element.id !== updatedElement.id)).push(updatedElement);

ভালো লেগেছে:

let elements = [ { id: 1, name: 'element one' }, { id: 2, name: 'element two'} ];
const updatedElement = { id: 1, name: 'updated element one' };

আপনার যদি আইডি না থাকে তবে আপনি উপাদানটিকে আরও শক্তিশালী করতে পারেন:

(elements = elements.filter(element => JSON.stringify(element) !== JSON.stringify(updatedElement))).push(updatedElement);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.