2017-03-17 9 views
6

में वस्तुओं की एक सरणी में पाया जाता है कि मेरे पास वस्तुओं के निम्नलिखित सरणी:वापसी वस्तु की संपत्ति यह जावास्क्रिप्ट

var contacts = [ 
    { 
     "firstName": "Akira", 
     "lastName": "Laine", 
     "number": "0543236543", 
     "likes": ["Pizza", "Coding", "Brownie Points"] 
    }, 
    { 
     "firstName": "Harry", 
     "lastName": "Potter", 
     "number": "0994372684", 
     "likes": ["Hogwarts", "Magic", "Hagrid"] 
    }, 
    { 
     "firstName": "Sherlock", 
     "lastName": "Holmes", 
     "number": "0487345643", 
     "likes": ["Intriguing Cases", "Violin"] 
    }, 
    { 
     "firstName": "Kristian", 
     "lastName": "Vos", 
     "number": "unknown", 
     "likes": ["Javascript", "Gaming", "Foxes"] 
    } 
]; 

मैं एक समारोह, lookUpProfile(firstName, prop), परिभाषित करना चाहते हैं जो इनपुट डेटा के लिए:

lookUpProfile("Akira", "likes"); 

वापस आ जाएगी:

["Pizza", "Coding", "Brownie Points"] 

यह मेरा समाधान अब तक जो कुछ वापस नहीं करता है जब तक है अब:

function lookUpProfile(firstName, prop){ 
    for(var i = 0; i < contacts.length; i++){ 
     if(contacts[i].firstName == firstName){ 
      for(var j = 0; j < contacts[i].length; j++){ 
       if(contacts[i].hasOwnProperty(prop)) 
        return prop; 
      } 
     } 
    } 
} 

क्या किसी को इसका समाधान करने का कोई विचार है? धन्यवाद

उत्तर

1

आप समस्या यह है कि आप संख्यात्मक indeces साथ पाश के लिए के साथ वस्तु पर पाश की कोशिश कर रहे है। आपको बिल्कुल दूसरी लूप की आवश्यकता नहीं है।

for(var j = 0; j < contacts[i].length; j++){ 

यहाँ फिर से दोहराने में प्रयास करने के लिए कोई जरूरत नहीं है: के रूप में सरल रूप में

function lookUpProfile(firstName, prop) { 
    for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName === firstName) { 
     if (contacts[i].hasOwnProperty(prop)) { 
     return contacts[i][prop]; 
     } 
    } 
    } 
} 

var contacts = [{ 
 
    "firstName": "Akira", 
 
    "lastName": "Laine", 
 
    "number": "0543236543", 
 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
 
    }, 
 
    { 
 
    "firstName": "Harry", 
 
    "lastName": "Potter", 
 
    "number": "0994372684", 
 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
    }, 
 
    { 
 
    "firstName": "Sherlock", 
 
    "lastName": "Holmes", 
 
    "number": "0487345643", 
 
    "likes": ["Intriguing Cases", "Violin"] 
 
    }, 
 
    { 
 
    "firstName": "Kristian", 
 
    "lastName": "Vos", 
 
    "number": "unknown", 
 
    "likes": ["Javascript", "Gaming", "Foxes"] 
 
    } 
 
]; 
 

 
function lookUpProfile(firstName, prop) { 
 
    for (var i = 0; i < contacts.length; i++) { 
 
    if (contacts[i].firstName === firstName) { 
 
     if (contacts[i].hasOwnProperty(prop)) 
 
     return contacts[i][prop]; 
 
    } 
 
    } 
 
} 
 

 
console.log(lookUpProfile("Akira", "likes"))

3

आप ऐसा करने की कोशिश कर सकते हैं। .find() फ़ंक्शन (ES6) के साथ आइटम ढूंढें और ब्रैकेट [] सिंटैक्स का उपयोग करके उपयुक्त संपत्ति वापस करें।

var contacts = [ 
 
    { 
 
     "firstName": "Akira", 
 
     "lastName": "Laine", 
 
     "number": "0543236543", 
 
     "likes": ["Pizza", "Coding", "Brownie Points"] 
 
    }, 
 
    { 
 
     "firstName": "Harry", 
 
     "lastName": "Potter", 
 
     "number": "0994372684", 
 
     "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
    }, 
 
    { 
 
     "firstName": "Sherlock", 
 
     "lastName": "Holmes", 
 
     "number": "0487345643", 
 
     "likes": ["Intriguing Cases", "Violin"] 
 
    }, 
 
    { 
 
     "firstName": "Kristian", 
 
     "lastName": "Vos", 
 
     "number": "unknown", 
 
     "likes": ["Javascript", "Gaming", "Foxes"] 
 
    } 
 
]; 
 

 
function lookUpProfileES6(name, prop){ 
 
    var found = contacts.find(item => item.firstName === name); 
 
    if(found){ 
 
     return found[prop]; 
 
    } 
 
} 
 

 
function lookUpProfileES5(name, prop){ 
 
    var found = null; 
 
    for(var i = 0; i < contacts.length; i++){ 
 
     if(contacts[i].firstName === name){ 
 
     found = contacts[i]; 
 
     break; 
 
     } 
 
    } 
 
    
 
    if(found){ 
 
     return found[prop]; 
 
    } 
 
} 
 

 
var resultES6 = lookUpProfileES6("Akira", "likes"); 
 
var resultES5 = lookUpProfileES5("Akira", "likes"); 
 

 
console.log(resultES6); 
 
console.log(resultES5);

1

अपने कोड के साथ समस्या यह इस लाइन था यह हो सकता है। इसके अलावा, संपर्क [i] एक वस्तु है और इस प्रकार कोई लंबाई संपत्ति नहीं है, इसलिए आप 0 < undefined की तुलना कर रहे हैं जो हमेशा झूठी होती है।

परिणामस्वरूप संपत्ति के लिए आपकी सशर्त जांच नहीं होती है। इसके अलावा, प्रोप यहां एक एक्सेसर है। इसलिए जब यह संपत्ति का नाम हो सकता है तो यह संपत्ति मूल्य नहीं रखता है। संपत्ति मूल्य को सही तरीके से वापस करने के लिए, आपको वर्तमान ऑब्जेक्ट पर [prop] के रूप में इसे एक्सेसर के रूप में उपयोग करने की आवश्यकता है।

दूसरे पुनरावृत्ति को हटाएं, ठीक से संपर्क ऑब्जेक्ट तक पहुंचें, और आपका फ़ंक्शन ठीक से काम करेगा।

function lookUpProfile(firstName, prop){ 
for(var i = 0; i < contacts.length; i++){ 
    if(contacts[i].firstName == firstName){ 
    if(contacts[i].hasOwnProperty(prop)) 
    return contacts[i][prop]; 
    } 
} 
} 
1

आप इस

// Create a function which will filter out the requirement 
var filtered = function(name, likes) { 
    var _toRet = '' 
    contacts.filter(function(elem, index) { 
    // check if the first name is same as requires 
    // check if the object have property likes 
    // Since the requirement is to search the likes array 
    if (elem.firstName === name && elem.hasOwnProperty(likes)) { 
     _toRet = elem[likes] 
    } 
    return _toRet // return from filter callback 

    }) 
return _toRet // return from the function 
} 

console.log(filtered('Akira', 'likes')) 

DEMO

की तरह कर सकते हैं
संबंधित मुद्दे