[英]Mapping Object to convert object to array
我在這里有此功能:
var obj = {
name: 'Holly',
age: 35,
role: 'producer'
};
function convertObjectToList(obj) {
return Object.keys(obj).map(k => [k, obj[k]]);
}
convertObjectToList(obj);
此函數將數組轉換為obj。 因此,如果我在上面具有該obj,我將得到以下內容:
[['name', 'Holly'], ['age', 35], ['role', 'producer']]
現在我要集中在這里:
return Object.keys(obj).map(k => [k, obj[k]]);
分解起來, Object.keys
基本上返回給定對象自己的可枚舉屬性的數組,並將映射迭代到數組中,等等。 我試圖理解上面的箭頭功能,並嘗試將其分解為更簡單易懂的代碼。
function convertObjectToList(obj) {
Object.keys(obj).map(function(key){
obj = [key, obj[key]];
});
console.log(obj);
}
但是這個沒有用。 相反,它僅返回[“ role”,未定義]。
有沒有人可以讓我用通俗易懂的術語理解並分解代碼,以便我可以清楚地理解。
對不起,我是初學者。 菜鳥。
箭頭函數與函數類似,但是語法不同。 普通函數使用語法
function(x, y){
return x + y;
}
箭頭函數使用單行語法
(x, y) => x + y
或多行語法
(x, y) => {
return x + y;
}
在您的示例中
return Object.keys(obj).map(k => [k, obj[k]]);
轉換為
return Object.keys(obj).map(function(k) {
return [k, obj[k]];
});
因為該函數采用一個參數k
(在箭頭之前)並返回[k, obj[i]]
(在箭頭之后)。
應該是這樣
var obj = { name: 'Holly', age: 35, role: 'producer' }; function convertObjectToList(obj) { return Object.keys(obj).map(function (k) { return [k, obj[k]]; }) } convertObjectToList(obj);
這是您的第二個功能:
function convertObjectToList(obj) {
Object.keys(obj).map(function(key){
obj = [key, obj[key]];
});
console.log(obj);
}
這里有些地方不合時宜:
[key, obj[key]]
重新分配obj
的值,這不是您想要執行的操作。 這就是為什么要獲取['role',未定義],因為obj
的最后一個鍵是role,並且由於obj已被修改為不是對象的數組,所以obj['role']
將返回未定義。 因此正確的代碼如下:
var obj = { name: 'Holly', age: 35, role: 'producer' }; function convertObjectToList(obj) { return Object.keys(obj).map(function(key){ let currElement = [key, obj[key]]; return currElement }); } var res = convertObjectToList(obj); console.log(res);
使用箭頭功能時,如果箭頭功能僅包含一行,則可以避免使用return語句。 因此,使用常規函數時,您需要手動返回
var obj = { name: 'Holly', age: 35, role: 'producer' }; function convertObjectToList(obj) { return Object.keys(obj).map(function(k) { return [k, obj[k]] }); } var result = convertObjectToList(obj); console.log(result);
Object.keys返回一個數組,該數組的元素是與直接在obj中找到的可枚舉屬性相對應的字符串。 屬性的順序與手動循環對象的屬性所給出的順序相同。
var arr = ["a", "b", "c"];
alert(Object.keys(arr)); // chiama alert con argomento "0,1,2"
// array like object
var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); // chiama alert con argomento "0,1,2"
假設您正在傳遞對象,則將像這樣構建地圖,這就是您的結果。
function objToStrMap(obj) {
const strMap = new Map();
for (const k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
在您的代碼中嘗試此更改
function convertObjectToList(obj) {
Object.keys(obj).map(function(key){
return [key, obj[key]]; //obj = [key, obj[key]];
});
}
您需要了解map函數是如何工作的,以查看您做錯了什么。 map函數帶有一個回調函數,我們將其稱為The Mapper 。 此函數接受數組中的每個項目,對其進行一些操作,然后返回操作結果。 map函數本身在數組上循環,每次都將一個項目傳遞給映射器,然后將結果添加到NEW數組中。
這是使用舊的for循環的map函數的實現:
function customMap(array, mapper) {
var result = [];
for (int i = 0; i < array.length; i++) {
var temp = mapper(array[i]);
result.push(temp);
}
return result;
}
現在,我們可以將此實現與您的函數進行比較,看看您做錯了什么:
要解決此問題,可以使用以下方法:
var obj = { name: 'Holly', age: 35, role: 'producer' }; function convertObjectToList(obj) { return Object.keys(obj).map(function(key) { var temp = [key, obj[key]]; console.log('current item: ', temp); return temp; }); } var result = convertObjectToList(obj); console.log('final result: ', result);
最后,沒有必要為菜鳥道歉-我們都是從這樣開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.