對不起,你說沒有循環,我很興奮,我很無聊,我得到的功能。
首先我縮短一些名字和我想他們是一種自我說明的:
- 頭:陣列
- 尾的第一個元素:所有元件,但第一
- 的isEmpty:檢查是否一個數組的長度爲0
transform
使用回調函數做實際工作,如果鍵數組爲空則不會遞歸。
var data = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}
// plumbing
var head = (a) => a[0]
var tail = (a) => a.slice(1)
var isEmpty = (a) => a.length === 0
// actual stuff happens here
var transform = (obj, callback) => {
var withval = (keys) => {
if(isEmpty(keys)) return
var p = head(keys)
if(!!obj[p]) callback(p)
withval(tail(keys))
}
withval(Object.keys(obj))
}
// Logs
var log = (p) => console.log(p)
transform(data, log)
// Array making
var arr = [];
var toArr = (p) => arr.push(p)
transform(data, toArr)
console.log(arr)
// Object making
var obj = {}
var toObj = (p) => obj[p] = data[p]
transform(data, toObj)
console.log(obj)
結果:
Country
Continent
State
[ 'Country', 'Continent', 'State' ]
{ Country: 'country', Continent: 'continent', State: 'state' }
你能解釋的'!! OBJ [道具]'的意思給我?我永遠不會看到雙''' –
@Fadhly Permata它基本上是將falsy或truthy值轉換爲它們的布爾等值。 ''undefined''或''''''或'0'(數字)是JS中的falsy值,如果像'!0'(單個否定)變成'true'那樣完成。所以雙重否定或雙重('!!')將其置於布爾狀態'!! 0'爲'false'。因此'!!「」'(double否定的空字符串)是'false','&&'的第二部分永遠不會被執行。 – Redu
ooooo ...所以我們不需要添加'()'括號來做到這一點?而三重或更多否定例如:'!!! obj [道具]'。我相信如果我的目標是使用'()',例如'!(!(!obj [prop]))' –