2016-10-15 70 views
0

有一個function返回基於某些條件的objectkey,如果返回key0,然後我得到的值是undefined從javascript函數返回數字零

var obj = {'some','values'}; 

function getObjectKey(){ 

    obj.forEach(function(value, key) { 
     if(some condition){ 
     return key; 
     } 
    }); 

} 

var objectKey = getObjectKey(); 
console.log(objectKey); //returns `undefined` if the key returned is 0. 

哪有如果密鑰爲0,我得到密鑰?

+0

請將obj更改爲有效的對象。就像它寫的那樣,它可能是一個數組,並且括號錯誤。 –

+0

[JavaScript對象使用字符串的鍵](https://stackoverflow.com/documentation/javascript/188/objects#t=201610151230320519827&a=remarks) – transistor09

+0

@downvoter:我可以知道downvote的原因是什麼? – Abhinav

回答

1

您需要另一種方法,因爲Array#forEach沒有用於結束循環的短路。

在這種情況下,請使用更好的Array#some

function getObjectKey(object, condition){ 
 
    var k; 
 

 
    Object.keys(object).some(function(key) { 
 
     if (condition(object[key])) { 
 
      k = key; 
 
      return true; 
 
     } 
 
    }); 
 
    return k; 
 
} 
 

 
var object = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5 }; 
 

 
console.log(getObjectKey(object, function (v) { return v === 3; }));

隨着ES6,可以使用Array#find

find()方法在陣列中返回一個,如果陣列中的一個元素滿足提供的測試功能。否則返回undefined

function getObjectKey(object, condition) { 
 
    return Object.keys(object).find(function(key) { 
 
     return condition(object[key]); 
 
    }); 
 
} 
 

 
var object = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5 }; 
 

 
console.log(getObjectKey(object, v => v === 3));

+1

它不是一個數組,而是一個對象,它會起作用嗎? – Abhinav

+0

現在它可以與一個對象一起工作。 –

+1

工作...謝謝你 – Abhinav

0

你需要指定的對象鍵。

這不是有效的語法:

{'some','values'}; 

這將是一個數組:

[ 'some','values' ]; 

但你真的想要一個對象,所以放在鍵:

{ "key0": "some", "key1": "values" }; 
0

// there was a syntax error with your obj 
 
var obj = { 
 
    'some': 'values', 
 
    'another': 'anotherValue', 
 
    'zero': 0, 
 
    'null': null 
 
} 
 

 
// you should take the object and the key with the function 
 
function getObjectKey(obj, key){ 
 
    var keys = Object.keys(obj) 
 
    var index = keys.indexOf(key) 
 
    // if the bitshifted index is truthy return the key else return undefined 
 
    return ~index 
 
    ? obj[keys[index]] 
 
    : void 0 // void value - will change the value given to it to undefined 
 
} 
 

 

 
console.log(getObjectKey(obj, 'some')) 
 
console.log(getObjectKey(obj, 'another')) 
 
console.log(getObjectKey(obj, 'doesntExist')) 
 
console.log(getObjectKey(obj, 'zero')) 
 
console.log(getObjectKey(obj, 'null'))