2017-01-30 139 views
2

我有一个像下面的对象:如何获取对象数组值的属性名称?

myObj = { 
    "name":"John", 
    "age":30, 
    "cars":[ "Ford", "BMW", "Fiat" ] 
} 

我怎么能知道属性名“车”当我输入“宝马”?当我在函数中传递参数“BMW”时,我需要一个需要返回属性名称“cars”的函数。

+0

请告诉我们函数。 –

+0

您是否尝试过循环对象值并将它们与函数参数进行比较? –

回答

2
function getKeyByitem(myObj, value) 
    for (var key in myObj) { 
    if (myObj.hasOwnProperty(key) && Array.isArray(myObj[key])) { 
     if(myObj[key].indexOf(value) != -1){ 
      return key; 
     } 
    } 
    } 
} 

var key = getKeyByitem(myObj, 'BMW'); 

这里是演示https://plnkr.co/edit/wVFGcAKuml4rWuIaMx2K?p=preview

+0

非常感谢....... :) –

+0

不客气:) –

0
myObj = { 
    "name":"John", 
    "age":30, 
    "cars":[ "Ford", "BMW", "Fiat" ] 
} 

var findKey = function (str) { 

    var keys = Object.getOwnPropertyNames(myObj); 
    var key = null; 

    var match = keys.some(function (k) { 
     key = k; 
     var val = myObj[key]; 

     if (Array.isArray(val)) { 
      return val.indexOf(str) >= 0; 
     } else { 
      return val.toString() === str; 
     } 

     return false; 
    }); 

    if (match) return key; 
} 

console.log(findKey('BMW'));  // 'cars' 
console.log(findKey('John'));  // 'name' 
console.log(findKey('30'));  // 'age' 

希望这有助于!

0

你CNA做这样的事情

var myObj = { 
    "name": "John", 
    "age": 30, 
    "cars": ["Ford", "BMW", "Fiat"] 
} 

var getKey=function(elem) { 
var toReturn = ''; 
    for (var k in myObj) { // loop through the object 
    if(Array.isArray(myObj[k])){ 
     if(myObj[k].indexOf(elem) !== -1){ 
     toReturn = k; 
     } 
    } 
    else{ 
      if(myObj[k] === elem){ 
     toReturn = k 
     } 
    } 
    } 
    return toReturn; 
} 

console.log(getKey('BMW')) 

DEMO