Bu dizinin her öğesi bir sayıdır.
var items = Array(523,3452,334,31, ...5346);
Bazı numaraları dizi ile yenisiyle nasıl değiştirebilirim?
Örneğin, 3452'yi 1010 ile değiştirmek istiyoruz, bunu nasıl yapardık?
replace
Dizileri yöntemi?
Bu dizinin her öğesi bir sayıdır.
var items = Array(523,3452,334,31, ...5346);
Bazı numaraları dizi ile yenisiyle nasıl değiştirebilirim?
Örneğin, 3452'yi 1010 ile değiştirmek istiyoruz, bunu nasıl yapardık?
replace
Dizileri yöntemi?
Yanıtlar:
var index = items.indexOf(3452);
if (index !== -1) {
items[index] = 1010;
}
Ayrıca, dizilerinizi başlatmak için yapıcı yöntemini kullanmamanız önerilir. Bunun yerine değişmez sözdizimini kullanın:
var items = [523, 3452, 334, 31, 5346];
~
İşleç ayrıca kısa JavaScript'e giriyorsanız ve -1
karşılaştırmayı kısaltmak istiyorsanız da kullanabilirsiniz :
var index = items.indexOf(3452);
if (~index) {
items[index] = 1010;
}
Bazen contains
bu kontrolü soyutlamak ve neler olduğunu anlamayı kolaylaştırmak için bir işlev yazmak isterim . Harika olan, bu dizilerde ve dizelerde hem de çalışır:
var contains = function (haystack, needle) {
return !!~haystack.indexOf(needle);
};
// can be used like so now:
if (contains(items, 3452)) {
// do something else...
}
Dizeler için ES6 / ES2015 ile başlayıp diziler için ES2016 için önerilen, bir kaynağın başka bir değer içerip içermediğini daha kolay belirleyebilirsiniz:
if (haystack.includes(needle)) {
// do your thing
}
contains
: var contains = (a, b) => !!~a.indexOf(b)
P:
Array.prototype.includes
bunun yerine kullanın.
in
bir nesnenin bir anahtarının (ör. 'property' in obj
) Olup olmadığını görmek için kullanabilirsiniz veya bir nesnenin değerleri ile de döngü yapabilirsiniz Object.values(obj).forEach(value => {})
.
Array.indexOf()
Yöntem, birinci örneği değiştirecektir. Her örneği kullanmak için Array.map()
:
a = a.map(function(item) { return item == 3452 ? 1010 : item; });
Tabii ki, bu yeni bir dizi oluşturur. Yerinde yapmak istiyorsanız, şunu kullanın Array.forEach()
:
a.forEach(function(item, i) { if (item == 3452) a[i] = 1010; });
Array.indexOf()
aynı zamanda tanıtıldı map()
ve forEach()
. IE8 veya daha eski sürümlerini destekliyorsanız ve destek eklemek için bir şim kullanmıyorsanız, mellamokb'un cevabına daha iyi gidin .
Benim önerdiğim çözüm:
items.splice(1, 1, 1010);
Ekleme işlemi, dizideki (yani 3452
) konum 1'den başlayarak 1 öğeyi kaldıracak ve yeni öğeyle değiştirecektir 1010
.
1
, aslında ilk parametre işlemin dizinde gerçekleştiği anlamına geldiğinde öğenin kaldırılacağı anlamına geldiğinden yanıltıcıdır 1
. developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Bir öğe bulmak için indexOf kullanın.
var i = items.indexOf(3452);
items[i] = 1010;
Bir for
döngü ile kolayca gerçekleştirilebilir .
for (var i = 0; i < items.length; i++)
if (items[i] == 3452)
items[i] = 1010;
Dizinleri kullanarak listenin herhangi bir sayısını düzenleyebilirsiniz
Örneğin :
items[0] = 5;
items[5] = 100;
Karmaşık bir nesne (hatta basit bir nesne) kullanıyorsanız ve es6'yı kullanabiliyorsanız, Array.prototype.findIndex
iyi bir nesnedir . OP dizisi için,
const index = items.findIndex(x => x === 3452)
items[index] = 1010
Daha karmaşık nesneler için bu gerçekten parlıyor. Örneğin,
const index =
items.findIndex(
x => x.jerseyNumber === 9 && x.school === 'Ohio State'
)
items[index].lastName = 'Utah'
items[index].firstName = 'Johnny'
Değiştirme bir satırda yapılabilir:
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);
Veya yeniden kullanmak için bir işlev oluşturun:
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);
ES6 yolu:
const items = Array(523, 3452, 334, 31, ...5346);
Çözüm 3452
ile değiştirmek istiyoruz 1010
:
const newItems = items.map(item => item === 3452 ? 1010 : item);
Şüphesiz, soru yıllarca önce ve şimdilik sadece değişmez bir çözüm kullanmayı tercih ediyorum , kesinlikle harika ReactJS
.
Sık kullanım için aşağıdaki fonksiyonu sunuyoruz:
const itemReplacer = (array, oldItem, newItem) =>
array.map(item => item === oldItem ? newItem : item);
Dizi öğesinin değiştirilmesi veya güncellenmesi için tek bir satırda en iyi yol
array.splice(array.indexOf(valueToReplace), 1, newValue)
Örneğin:
let items = ['JS', 'PHP', 'RUBY'];
let replacedItem = items.splice(items.indexOf('RUBY'), 1, 'PYTHON')
console.log(replacedItem) //['RUBY']
console.log(items) //['JS', 'PHP', 'PYTHON']
Aynı işlemi yapmanın diğer bir basit yolu:
items[items.indexOf(oldValue)] = newValue
En kolay yol, undercorejs ve map yöntemi gibi bazı kütüphaneleri kullanmaktır .
var items = Array(523,3452,334,31,...5346);
_.map(items, function(num) {
return (num == 3452) ? 1010 : num;
});
=> [523, 1010, 334, 31, ...5346]
replace
şimdi bir dizi farkında ..._.replace([1, 2, 3], 2, 3);
ES6 spread operatörleri ve .slice
yöntemini kullanarak listedeki öğeyi değiştirmenin değişmez yolu .
const arr = ['fir', 'next', 'third'], item = 'next'
const nextArr = [
...arr.slice(0, arr.indexOf(item)),
'second',
...arr.slice(arr.indexOf(item) + 1)
]
Çalıştığını doğrulayın
console.log(arr) // [ 'fir', 'next', 'third' ]
console.log(nextArr) // ['fir', 'second', 'third']
var items = Array(523,3452,334,31,5346);
Değeri biliyorsanız, kullanın,
items[items.indexOf(334)] = 1010;
Değerin mevcut olup olmadığını bilmek istiyorsanız,
var point = items.indexOf(334);
if (point !== -1) {
items[point] = 1010;
}
Yeri (konumu) biliyorsanız, doğrudan kullanın,
items[--position] = 1010;
Birkaç öğeyi değiştirmek istiyorsanız ve yalnızca başlangıç konumunun anlamına geldiğini biliyorsanız,
items.splice(2, 1, 1010, 1220);
.splice hakkında daha fazla bilgi için
var index = Array.indexOf(Array value);
if (index > -1) {
Array.splice(index, 1);
}
Buradan belirli bir değeri diziden silebilirsiniz ve aynı dizine dayanarak diziye değer ekleyebilirsiniz.
Array.splice(index, 0, Array value);
Herkes bir dizindeki bir nesneyi dizininden nasıl değiştireceğine müdahale ederse, işte bir çözüm.
Nesnenin dizinini kimliğiyle bulun:
const index = items.map(item => item.id).indexOf(objectId)
Nesneyi Object.assign () yöntemini kullanarak değiştirin:
Object.assign(items[index], newValue)
@ Gilly3 tarafından verilen yanıt harika.
Bunu nesne dizisi için genişletme
Sunucudan veri aldığımda yeni güncellenmiş kaydı kayıt dizime güncellemek için aşağıdaki yolu tercih ederim. Siparişi sağlam ve bir astarı oldukça düz tutar.
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);
İlk olarak dizinizi şu şekilde yeniden yazın:
var items = [523,3452,334,31,...5346];
Ardından, dizideki öğeye dizin numarası aracılığıyla erişin. Dizin numarasını belirleme formülü:n-1
Dizideki ilk öğeyi değiştirmek için şunu (n=1)
yazın:
items[0] = Enter Your New Number;
Örneğinizde, sayı 3452
ikinci konumdadır (n=2)
. Yani indeks numarasını belirlemek için formül 2-1 = 1
. Yani değiştirmek için aşağıdaki kodu yazmak 3452
ile 1010
:
items[1] = 1010;
Yeniden kullanılabilir bir işleve verilen temel cevap:
function arrayFindReplace(array, findValue, replaceValue){
while(array.indexOf(findValue) !== -1){
let index = array.indexOf(findValue);
array[index] = replaceValue;
}
}
Döngüler için kullanarak ve orijinal dizi üzerinden yineleme ve başka bir diziye eşleşen arreas konumlarını ekleyerek ve daha sonra bu dizi döngü ve orijinal dizi değiştirerek sonra geri dönün, kullandım ve ok işlevi ama normal bir işlev bu sorunu çözdü çok işe yarar.
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;
};
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.
En kolay yol budur.
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
çalışmıyor Doğru sonuçlar vermiyor
İşte bir astar. Öğenin dizide olacağını varsayar.
var items = [523, 3452, 334, 31, 5346]
var replace = (arr, oldVal, newVal) => (arr[arr.indexOf(oldVal)] = newVal, arr)
console.log(replace(items, 3452, 1010))
Basit bir şeker sintaks oneliner istiyorsanız sadece şunları yapabilirsiniz:
(elements = elements.filter(element => element.id !== updatedElement.id)).push(updatedElement);
Sevmek:
let elements = [ { id: 1, name: 'element one' }, { id: 2, name: 'element two'} ];
const updatedElement = { id: 1, name: 'updated element one' };
Kimliğiniz yoksa, öğeyi şu şekilde dizeleyebilirsiniz:
(elements = elements.filter(element => JSON.stringify(element) !== JSON.stringify(updatedElement))).push(updatedElement);