1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
---
title: Array.prototype.find()
slug: Web/JavaScript/Reference/Global_Objects/Array/find
translation_of: Web/JavaScript/Reference/Global_Objects/Array/find
---
<div>{{JSRef}}</div>
<p><code><strong>find()</strong></code> metodu parametre olarak verilen, true/false değer döndüren test fonksiyonunu karşılayan dizi içerisindeki ilk elemanın <strong>değerini</strong> döndürür. Aksi halde {{jsxref("undefined")}} döndürür.</p>
<pre class="brush: js">function yeterinceBuyuk(eleman) {
return eleman >= 15;
}
[12, 5, 8, 130, 44].find(yeterinceBuyuk); // 130</pre>
<p>Ayrıca {{jsxref("Array.findIndex", "findIndex()")}} metoduna bakınız, bu metod dizi içerisinde bulunan elemanın değeri yerine <strong>indeksini</strong> döndürür.</p>
<p>Dizi içerisindeki elemanın pozizyonunu bulmak ya da var olup olmadığına bakmak için {{jsxref("Array.prototype.indexOf()")}} veya {{jsxref("Array.prototype.includes()")}} kullanabilirsiniz.</p>
<h2 id="Sözdizim">Sözdizim</h2>
<pre class="syntaxbox"><em>arr</em>.find(<var>gericagrim</var>[, <var>thisArg</var>])</pre>
<h3 id="Parametreler">Parametreler</h3>
<dl>
<dt><code>gericagrim</code></dt>
<dd>Dizi içerisindeki her bir değer için çalıştırılacak fonksiyon, üç parametre alır:
<dl>
<dt><code>eleman</code></dt>
<dd>Dizideki işlenen mevcut eleman.</dd>
<dt><code>indeks</code></dt>
<dd>Dizideki işlenen mevcut elemanın indeksi.</dd>
<dt><code>dizi</code></dt>
<dd><code>find</code> metodunun çağırıldığı dizi.</dd>
</dl>
</dd>
<dt><code>thisArg</code> <code>{{Optional_inline}}</code></dt>
<dd> <code>gericagrim</code> çalıştığında <code>this</code> olarak kullanılan nesne.</dd>
</dl>
<h3 id="Dönüş_değeri">Dönüş değeri</h3>
<p>Eğer test doğrulanırsa dizi içerisindeki bir değer; değilse, {{jsxref("undefined")}}.</p>
<h2 id="Açıklama">Açıklama</h2>
<p><code>find</code> metodu <code>gericagrim</code> fonksiyonu doğru bir değer döndürene kadar her bir indeks için bir sefer <code>gericagrim</code> fonksiyonunu çalıştırır. Eğer böyle bir eleman bulunduysa, <code>find</code> derhal bu elemanın değerini döndürür. Aksi halde, <code>find</code> {{jsxref("undefined")}} döndürür. <code>gericagrim</code> <code>0</code> dan <code>length - 1</code> dahil olmak üzere değer atanan ya da atanmayan dizinin her bir elemanı için çağırılır. Bu, aralıklı diziler için sadece değer atanan indeksleri ziyaret eden diğer metodlardan daha verimsiz olduğu anlamına gelmektedir. </p>
<p><code>gericagrim</code> üç parametre ile çağırılır: dizi elemanının değeri, dizi elemanının indeksi, ve geçilen dizi nesnesi.</p>
<p>Eğer bir <code>thisArg</code> parametresi <code>find</code> için sağlanırsa, bu parametre <code>gericagrim</code> fonksiyonunun her çağırılışı için <code>this</code> olarak kullanılacaktır. Eğer sağlanmazsa, {{jsxref("undefined")}} kullanılır.</p>
<p><code>find</code> üzerinde çağırıldığı diziyi değiştirmez.</p>
<p><code>find</code> tarafından işlenilen elemanların aralığı <code>gericagrim</code> fonksiyonunun ilk çağırılışından önce atanır. <code>find</code> çağırılmaya başlandığından sonra diziye eklenen elemanlar <code>gericagrim</code> tarafından ziyaret edilmeyecektir. Eğer varolan, ziyaret edilmeyen eleman <code>gericagrim</code> tarafından değiştirilirse, bu elemanı ziyaret eden <code>gericagrim</code> fonkisyonuna aktarılan değeri <code>find</code> metodunun bu elemanın indeksini ziyaret edeceği andaki değer olacaktır; silenen elemanlar yine de ziyaret edilecektir.</p>
<h2 id="Örnekler">Örnekler</h2>
<h3 id="Dizi_içerisindeki_nesneyi_bir_özelliğinden_bulmak">Dizi içerisindeki nesneyi bir özelliğinden bulmak</h3>
<pre class="brush: js">var envanter = [
{isim: 'elma', miktar: 2},
{isim: 'muz', miktar: 0},
{isim: 'kiraz', miktar: 5}
];
function kirazlariBul(meyve) {
return meyve.isim === 'kiraz';
}
console.log(envanter.find(kirazlariBul));
// { isim: 'kiraz', miktar: 5 }</pre>
<h3 id="Dizi_içerisindeki_bir_asal_sayıyı_bulmak">Dizi içerisindeki bir asal sayıyı bulmak</h3>
<p>Aşağıdaki örnek dizi içerisindeki bir asal sayı olan elemanı bulur (ya da eğer asal sayı yoksa {{jsxref("undefined")}} döndürür).</p>
<pre class="brush: js">function asalMi(eleman, indeks, dizi) {
var baslangic = 2;
while (baslangic <= Math.sqrt(eleman)) {
if (eleman % baslangic++ < 1) {
return false;
}
}
return eleman > 1;
}
console.log([4, 6, 8, 12].find(asalMi)); // undefined, bulunamadı
console.log([4, 5, 8, 12].find(asalMi)); // 5
</pre>
<p>Aşağıdaki örnek varolmayan ve silinen elemanların ziyaret edildiğini ve gericağrım fonksiyonuna gönderilen değerin ziyaret edildikleri andaki değerleri olduğunu gösterir.</p>
<pre class="brush: js">// İndeks 2, 3 ve 4 için elemanı bulunmayan bir dizi tanımlar
var a = [0,1,,,,5,6];
// Sadece değer atanmış olanlar değil, tüm indeksleri gösterir
a.find(function(deger, indeks) {
console.log('Ziyaret edilen indeks ' + indeks + ' ve değeri ' + deger);
});
// Silinenler dahil, bütün indeksleri gösterir
a.find(function(deger, indeks) {
// İndeksi 5 olan elamanı birinci iterasyonda siler
if (indeks == 0) {
console.log('a[5] siliniyor ve değeri ' + a[5]);
delete a[5];
}
// İndeksi 5 olan elaman silinse bile yine de ziyaret edilir
console.log('Ziyaret edilen indeks ' + indeks + ' ve değeri ' + deger);
});
</pre>
<h2 id="Polyfill">Polyfill</h2>
<p>Bu metod ECMAScript 2015 spesifikasyonuna eklenmiştir ve tüm JavaScript implementasyonlarında kullanıma hazır olmayabilir. Fakat, aşağıdaki kod parçacığı ile <code>Array.prototype.find</code> polyfill yapabilirsiniz:</p>
<pre class="brush: js">// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
value: function(predicate) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}
// 7. Return undefined.
return undefined;
}
});
}
</pre>
<p>Eğer <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code> desteği bulunmayan tamamen eskimiş JavaScript motorları için ihtiyacınız varsa, <code>Array.prototype</code> metodlarını polyfill yapmamanız en doğrusudur, çünkü bu metodlar numaralandırılabilir olmayan metodlardır.</p>
<h2 id="Spesifikasyonlar">Spesifikasyonlar</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spesifikasyon</th>
<th scope="col">Durum</th>
<th scope="col">Açıklama</th>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td>İlk tanım.</td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Tarayıcı_uyumluluğu">Tarayıcı uyumluluğu</h2>
<div>
<p>{{Compat("javascript.builtins.Array.find")}}</p>
</div>
<h2 id="Ayrıca_bakınız">Ayrıca bakınız</h2>
<ul>
<li>{{jsxref("Array.prototype.findIndex()")}} – bulur ve indeksi döndürür</li>
<li>{{jsxref("Array.prototype.filter()")}} – eşleşen bütün elemanları bulur</li>
<li>{{jsxref("Array.prototype.every()")}} – bütün elemanları birlikte test eder</li>
</ul>
|