कैसे जावास्क्रिप्ट के साथ एक सरणी में एक आइटम को बदलने के लिए?


315

इस सरणी का प्रत्येक आइटम कुछ संख्या है।

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

मैं कुछ संख्या को सरणी में एक नए के साथ कैसे बदलूं?

उदाहरण के लिए, हम 3452 को 1010 से बदलना चाहते हैं, हम यह कैसे करेंगे?


5
क्या 3452 के कई उदाहरण हैं जिन्हें बदलने की आवश्यकता है, या सिर्फ एक?
मेलामोकब

53
एक उदाहरण होगा, अगर अंधेरे बल एक को नहीं जोड़ेंगे।
जेम्स

2
जब स्ट्रिंग को प्रतिस्थापित किया जाता है तो replaceएरे के लिए कोई विधि क्यों नहीं है ?
जीवनशैली

जवाबों:


464
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): पी
फ्लोरी

1
@ आप नुकसान की व्याख्या कर सकते हैं?
कार्ल टेलर

1
@ कर्लटायलर यह बहुत मुहावरेदार नहीं है। यदि आप ES2017 का उपयोग कर सकते हैं, तो Array.prototype.includesइसके बजाय उपयोग करें ।
भू

1
क्या मैं ऑब्जेक्ट तत्वों के साथ IndexOf का उपयोग कर सकता हूं?
वल्रोब

2
@ValRob नहीं, लेकिन आप यह 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/JavaScript/Reference/Global_Objects/…
jfriend00

2
Array.indexOf()के रूप में एक ही समय में शुरू किया गया था map()और forEach()। यदि आप IE8 या पहले का समर्थन कर रहे हैं, और आप समर्थन में जोड़ने के लिए एक शिम का उपयोग नहीं कर रहे हैं, तो बेहतर है मेलमोकब के जवाब के साथ जाएं
गिली ३

array.map उनके दूसरे पैरामीटर a = a.map (फ़ंक्शन (आइटम, की)) {if (आइटम == 3452) [a] [key] = 1010;}) में भी इंडेक्स लौटाता है;
रिकी शर्मा

38

मेरा सुझाव दिया समाधान होगा:

items.splice(1, 1, 1010);

ब्याह ऑपरेशन 1 आइटम को हटा देगा, सरणी (यानी 3452) में स्थिति 1 पर शुरू होगा, और इसे नए आइटम से बदल देगा 1010


6
यह भ्रामक है क्योंकि आप यह मानते हैं कि पहला पैरामीटर का मतलब है कि 1आइटम को हटा दिया जाएगा जब वास्तव में पहला पैरामीटर का मतलब है कि ऑपरेशन इंडेक्स पर होता है 1developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
इनसो

28

एक तत्व खोजने के लिए indexOf का उपयोग करें।

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

1
क्या होगा अगर यह तत्व की उम्मीद नहीं करता है। अगर यह पाया तत्व के सूचकांक वापस आ जाएगा, लेकिन अगर यह -1 नहीं लौटेगा। और यह उस मान को -1 पर सेट करने वाला है। देखें jsbin.com/wugatuwora/edit?js,console
सुरेखा shelake

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

यदि एक जटिल वस्तु (या एक साधारण एक) का उपयोग कर रहे हैं और आप es6 का उपयोग कर सकते हैं, 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

ईएस 6 प्रसार ऑपरेटरों और .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 () विधि का उपयोग करके ऑब्जेक्ट को बदलें:

Object.assign(items[index], newValue)

1

@ Gilly3 से उत्तर बहुत अच्छा है।

वस्तुओं की सरणी के लिए इसे कैसे बढ़ाया जाए

जब मैं सर्वर से डेटा प्राप्त करता हूं तो मैं अपने रिकॉर्ड में नए अपडेट किए गए रिकॉर्ड को अपडेट करने का तरीका पसंद करता हूं। यह आदेश को अक्षुण्ण रखता है और एक लाइनर को काफी सीधा करता है।

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
सूचकांक दें; ((index = indexOf (findValue))! == -1) दोहरे indexOf (findValue) से बचने के लिए
Juan R

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]

इंडेक्स 0 में पाए गए आइटमों के लिए काम नहीं replaceWhat = 523, replaceWith = 999999करता है, सही परिणाम नहीं देता है
एंथोनी चुंग


0

यदि आप एक सरल चीनी sintax oneliner चाहते हैं:

(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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.