Returns the target value in a nested
Use the in operator to check if target exists in obj.
If found, return the value of obj[target], otherwise use Object.values(obj) and Array.prototype.reduce() to recursively call dig on each nested object until the first matching key/value pair is found.
如何在巢狀的資料下找到目標的值,依照步驟進行,
1.使用 in 運算符 找到 物件裡面指定的屬性
2.沒有的話 就是使用 Object.values(obj) 和 Array.prototype.reduce() 遞迴 到 object 找到相對應的 鍵/值
const dig = (obj, target) =>
target in obj
? obj[target]
: Object.values(obj).reduce((acc, val) => {
if (acc !== undefined) return acc;
if (typeof val === 'object') return dig(val, target);
}, undefined);
//EXAMPLES
const data = {
level1: {
level2: {
level3: 'some data'
}
}
};
dig(data, 'level3'); // 'some data'
dig(data, 'level4'); // undefined
指定的屬性在指定的對像或其原型鏈中,則in 運算符返回true
const car = { make: 'Honda', model: 'Accord', year: 1998 };
console.log('make' in car);
// expected output: true
delete car.make;
if ('make' in car === false) {
car.make = 'Suzuki';
}
console.log(car.make);
// expected output: "Suzuki"
in 右操作數必須是一個對象值。例如,你可以指定使用String構造函數創建的字符串,但不能指定字符串文字
在物件下取得 value 的陣列
在這一連串資料下取得 value 之特性屬性的陣列。常常用在物件裡面有物件的狀況。
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
array.reduce(function(accumulator , currentValue, currentIndex, arr),initialValue)
reduce()
是一個比較難以理解的概念,其核心概念就是聚合(一群小分子合併成大分子)有很多種用法,最常看到用在累計總加上。
計算相同元素數量並以物件鍵值顯示,裡面使用條件判斷
var arr =['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var Narr = arr.reduce(function (sum, el) {
if (el in sum) {
sum[el]++;
}
else {
sum[el] = 1;
}
return sum;
}, {});
// countedNames is: 出現在陣列就就累加的規則
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }