23 Haziran 2020 Salı

Array Sınıfı

Giriş
Mutator metodlar şöyle.
Array.prototype.copyWithin()
Array.prototype.fill()
Array.prototype.pop()
Array.prototype.push()
Array.prototype.reverse()
Array.prototype.shift()
Array.prototype.sort()
Array.prototype.splice()
Array.prototype.unshift()
Şeklen şöyle


constructor
Örnek
Boş bir dizi tanımlamak için şöyle yaparız.
var list = [];
Aynı şeyi var yerine let ile yapmak için şöyle yaparız.
let list = [];
Örnek
Boş bir dizi tanımlamak için şöyle yaparız.
var x = new Array();
Örnek
Yarı dolu bir dizi tanımlamak için şöyle yaparız.
var list = new Array(1, , 3, ); // [1, undefined, 3, undefined]
Aynı şeyi Array kelimesini kullanmadan şöyle yaparız.
var list = [undefined, undefined, 2]
Aynı şeyi Array kelimesini kullanmadan şöyle yaparız.
let array1 = [4,5,6]; // array created with an array litteral
constructor - size
Şöyle yaparız.
const data = Array(10).fill().map((v, i) => ({id: i + 1}))
concat metodu
concat metodu yazısına taşıdım.

copyWithin metodu
Array'i kendi içnde kopyalamak içndir.

every metodu
Örnek
Şöyle yaparız.split işleminden sonra gelen her eleman ilk değere eşitse boş string döner. Değilse en büyük değeri döner.
s=>(a=s.split`,`).every(e=>a[0]==e)?'':Math.max(...a)
flatMap metodu
flatMap metodu yazısına taşıdım.

fill metodu
Şöyle yaparız.
Array(6).fill('somedata')
filter metodu
filter metodu yazısına taşıdım.

find
find metodu yazısına taşıdım.

findIndex metodu - value
Örnek
Şöyle yaparız.
arr = [1.99, 2.19, 2.39, 2.59, 2.79, 2.99, 3.19, 3.39, 3.59, 3.79, 4.00]

// 4
console.log(arr.findIndex(item => item > 2.65))
// 5 
console.log(arr.findIndex(item => item > 2.85))
// 0
console.log(arr.findIndex(item => item > 1.85))

// -1 -- no items greater than 4.0
console.log(arr.findIndex(item => item > 4.5))
findIndex metodu - value + index
Örnek
Şöyle yaparız.
const indexEqualsValue = array => array.findIndex((v, i) => v === i);

console.log(indexEqualsValue([-8, 0, 2, 5])); //  2
console.log(indexEqualsValue([-1, 0, 3, 6])); // -1

forEach metodu
Array'deki her elemanı bir metoda sokabilmek için çok kullanışlı.

1. Eğer yeni bir dizi istiyorsak forEach() yerine map() metodu da kullanılabilir.
2. forEach() yerine for döngüsü de kullanılabilir.

Örnek
Şöyle yaparız.
// testing mutations with Array methods
function ageUp (n){
  return n+1;
}
function coolName (name){
  return name+name;
}

// testing using an array of objects
const a = [{ name: "John", age: 6}, { name: "Jane", age: 4}]
const b = [{ name: "Jonas", age: 20}, { name: "Jana", age: 30}]


a.forEach( person => {
  person.name = coolName(person.name)
  person.age = ageUp(person.age)
}
)
Örnek
Elimizde bir Json dizisi olsun. Bu dizideki profile_image_url alanı null olan nesnelerin bu alanına bir değer atamak isteyelim. Şöyle yaparız.
var arr = [{
  "country": "",
  "artist_id": 4,
  "email": "LzoCqLeVpy8h@example.com",
  "profile_image_url": ""
}, {...}, {...}, {...}];

// e: element, i: index
arr.forEach(function(e, i) {
  if (e.profile_image_url === '') {
    arr[i].profile_image_url = '/media/artist/img_0930-1-9654.jpg';
  }
});

console.log(arr);
document.write('<pre>' + JSON.stringify(arr, 0, 2) + '</pre>');
from metodu
Açıklaması şöyle. Belirtilen büyüklükte bir diziyi belirtilen değerlerle doldurur.
You can pass a {length: somlength} object or some other array-like object and a function that defines each item. The first argument (calling it _ just to indicate it's not used) to that function would be the item from an array we passed in (but we only passed in a length so it doesn't mean much), the second i is the index, which is used for your id
Örnek  - string
Şöyle yaparız
const emoji = '👍';
console.log(Array.from(emoji)); // Output: ["👍"]
Örnek - array + map
Şöyle yaparız.
Array.from(new Array(5), (und, ind) => ind) // This returns [0,1,2,3,4] 
Örnek - object + index
Şöyle yaparız.
let sampleData = Array.from({length: 10}, (_, i) => ({id:i}))
includes metodu
Şöyle yaparız. Bu metod yerine Set sınıfı kullanılabilir.
if (!["of", "and", "the", "to"].includes(...)) {...}
isArray metodu
Şöyle yaparız
const names = x => (Array.isArray(x) ? x : [x]).map(name => name && name.toUpperCase());

console.log(JSON.stringify( names(['Bart', 'Lisa']) ));
console.log(JSON.stringify( names('Homer') ));
console.log(JSON.stringify( names('') ));
console.log(JSON.stringify( names(null) ));
console.log(JSON.stringify( names([null]) ));
console.log(JSON.stringify( names([undefined, "Roger", "Bob", null]) ));
join metodu
Şöyle yaparız.
let arr = [1, 2, 3, 4, 5];
alert(arr.join());
length Alanı
Örnek
Array'in boyunu alırız
for(var i = list.length - 1; i >= 0; i--) {
  if(list[i] === item) {...}
}
Örnek
Elimizde şöyle bir kod olsun.
var fruits = [];
fruits.push('banana', 'apple', 'peach');
console.log(fruits.length); // 3
Length'i artırmak mümkün.Açıklaması şöyle.
When setting a property on a JavaScript array when the property is a valid array index and that index is outside the current bounds of the array, the engine will update the array's length property accordingly:
Şöyle yaparız.
fruits[5] = 'mango';
console.log(fruits[5]); // 'mango'
console.log(Object.keys(fruits));  // ['0', '1', '2', '5']
console.log(fruits.length); // 6
Tekrar artıralım
fruits.length = 10;
console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
console.log(fruits.length); // 10
Azaltırsak sayılar silinir. Açıklaması şöyle.
Decreasing the length property does, however, delete elements.
Şöyle yaparız.
fruits.length = 2;
console.log(Object.keys(fruits)); // ['0', '1']
console.log(fruits.length); // 2
Örnek
Mevcut bir nesnenin boyunu sıfır yaparsak içindeki herşeyi sileriz.
list.length = 0
map metodu
map metodu yazısına taşıdım.

operator []  metodu - Adding an item at an arbitrary location in javascript array
Belirtilen konuma değer atar. Bu operator gerekirse diziyi dense veya sparse yapar. Açıklaması şöyle.
Since an array's length can change at any time, and data can be stored at non-contiguous locations in the array, JavaScript arrays are not guaranteed to be dense; this depends on how the programmer chooses to use them. In general, these are convenient characteristics; but if these features are not desirable for your particular use, you might consider using typed arrays.
Örnek
Şöyle yaparız.
if(list[i] === item) {...}
Örnek
Sparse dizi şöyledir.
var a = []
a[100000000] = 100000000
Örnek
Şöyle yaparız
const months = ['January', 'February', 'March', 'April', 'June'];

months[11] = "December";

console.log(months.indexOf("December"));
console.log(months);
Çıktı olarak şunu alırız
[
  "January",
  "February",
  "March",
  "April",
  "June",
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  "December"
]
Örnek
Dizi büyürse length alanı da büyür ve aradaki boşluklar doldurulur.  Şöyle yaparız.
var a = []; // Create a new empty array.
a[5] = 5;   // Perfectly legal JavaScript that resizes the array.

for (var i = 0; i < a.length; i++) {
    // Iterate over numeric indexes from 0 to 5, as everyone expects.
    console.log(a[i]);
}

/* Will display:
   undefined
   undefined
   undefined
   undefined
   undefined
   5
*/
Diziyi sadece dolu olan elemanları ile dolaşmak için şöyle yaparız.
var a = [];
a[5] = 5;
for (var x in a) {
    // Shows only the explicitly set index of "5", and ignores 0-4
    console.log(x);
}

/* Will display:
   5
*/
pop metodu
En sondaki elemanı alır.
Örnek
Tüm diziyi şöyle sileriz.
while(list.length > 0) {
    list.pop();
}
Örnek
Şöyle yaparız.
const input = ['one', 'two', 'three', 'four'];
const last = input.pop();
const result = input.join(', ') + ' and ' + last;
console.log(result);
Çıktı olarak şunu alırız.
'one, two, three and four'
push metodu
Örnek
Şöyle yaparız.
let sampleData = [];
for (var p = 0; p < 25; p++){
    sampleData.push({id: p});
}

return {
    data: sampleData,
    isLoading: true
};
Çıktı olarak şunu alırız.
var sampleData = [{id: 1},{id: 2},...];
Örnek
Şöyle yaparız.
function addItem (){
  var name = prompt("Enter item name:");
  list.push(name);
  
};
reduce metodu
reduce metodu yazısına taşıdım.

reduceRight metodu
reduce() metodu gibidir. Array soldan sağa yerine sağdan sola dolaşılır

reverse metodu
Şöyle yaparız.
let arr = [1, 2, 3, 4, 5];
arr.reverse();
shift metodu
Dizinin başındaki elemanı siler.

some metodu
Aslında bu metodun ismi bence any() olmalıydı. Koşulu sağlayan bir eleman varsa true döner.
Örnek
Şöyle yaparız.
if (this.data && this.data.some((item) => item.info)) {
  ...
}
sort metodu
sort metodu yazısına taşıdım.

slice metodu
İlk parametre eğer varsa başlangıç konumunu gösterir. İkinci parametre eğer varsa bitiş konumunu gösterir. Eğer ilk parametre verilmezse 0 kabul edilir. Eğer son parametre verilmezse dizinin sonu verilmiş kabul edilir. Eğer son parametre belirtilirse hariç (exlude) bırakılır. Yaniki iki tane parametre varsa matematiksel olarak [start,end) şeklinde kabul edilir.
Örnek
Kopyasını almak için şöyle yaparız.
var array2=[];

var items = [  
  { label: '1', url: '1.png' },
  { label: '2', url: '2.png' },
  { label: '3', url: '3.png' },
  { label: '4', url: '4.png' },
  { label: '5', url: '5.png' },
  { label: '6', url: '6.png' },
  { label: '7', url: '7.png' },
  { label: '8', url: '8.png' },
  { label: '9', url: '9.png' },
  { label: '10', url: '10.png'},
  { label: '11', url: '11.png'},
  { label: '12', url: '12.png'}];

array2 = items.slice(); 
Örnek
Diziyi tersine çevirmek için şöyle yaparız.
var list = ['c','a','r','p','e','t'];

var reversedList = list.slice(0).reverse();
splice metodu
Verilen indeksten itibaren, verilen sayı kadar nesneyi siler. Tüm diziyi şöyle sileriz.
list.splice(0,list.length)
Belli bir değeri bulup silme ise şöyle olur. Önce değerin indeksini buluruz.
var array = [2, 5, 9];
var index = array.indexOf(5);
Sonra indeks mevcutsa splice() ile sileriz.
if (index > -1) {
    array.splice(index, 1);
}
unshift metodu
shift() metodunun tersidir. Dizinin başına yeni bir eleman ekler.
Örnek
Diziyi tersine çevirmek için şöyle yaparız.
function reverse(list) {
    var list2 = [];
    for (let i = 0; i < list.length; i++)
        list2.unshift(list[i]);
    return list2;
}

var list = ['c', 'a', 'r', 'p', 'e', 't'];
console.log(reverse(list));
Yeni Metod Ekleme
Mevcut sınıfa yeni metod ekleyebilme Javascript'in en önemli özelliği.

clear
Clear metodu eklemek için şöyle yaparız.
Array.prototype.clear = function() {
    this.splice(0, this.length);
};
Daha sonra yeni metod şöyle kullanılır.
var list = [1, 2, 3];
list.clear();
remByVal
Şöyle yaparız
Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}
//Call like
[1, 2, 3, 4].remByVal(3);
Yeni Alan Ekleme
Şöyle yaparız.
// Somewhere deep in your JavaScript library...
Array.prototype.foo = 1;

// Now you have no idea what the below code will do.
var a = [1, 2, 3, 4, 5];
for (var x in a){
    // Now foo is a part of EVERY array and 
    // will show up here as a value of 'x'.
    console.log(x);
}

/* Will display:
   0
   1
   2
   3
   4
   foo
*/

Hiç yorum yok:

Yorum Gönder