function select(arr, obj) {
  var myKeys = Object.keys(obj);
  var myValues = Object.values(obj);
  var newObj = {};

  for(var i=0; i<myKeys.length; i++) {

    if(arr[i] === myKeys[i]) {
      newObj[myKeys[i]] = myValues[i];   
    }

  }
  
  return newObj;
}

var arr = ['a', 'c', 'e'];
var obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
};
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }

/*

If keys are present in the given array, but are not in 
the given object, it should ignore them.

It does not modify the passed in object.

*/

मुझे ऑब्जेक्ट प्रॉपर्टी के रूप में सरणी जोड़ने में समस्या हो रही है। मैंने मूल्यों को स्टोर करने के लिए एक नया ऑब्जेक्ट बनाया है, हालांकि यह केवल एआर [i] का पहला उदाहरण संग्रहीत करता है। मैं इस बिंदु पर उलझन में हूँ कोई मदद?

1
Brixsta 14 मार्च 2021, 00:14

2 जवाब

मैं अपेक्षाकृत हाल ही में जोड़े गए Object.fromEntries अपने ऑब्जेक्ट से कीज़ के फ़िल्टर किए गए सेट के मैप से सीधे ऑब्जेक्ट बनाने के लिए।

function select (arr, obj) {
   // get the keys from obj and filter to those present in arr
   var keys = Object.keys(obj).filter(key => arr.includes(key));
   // create an array of arrays where each inner array has a key and value
   var entries = keys.map(key => [key, obj[key]]);
   // call fromEntries with that new array.
   return Object.fromEntries(entries);
}

var arr = ['a', 'c', 'e'];
var obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
};
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }

/*

If keys are present in the given array, but are not in 
the given object, it should ignore them.

It does not modify the passed in object.

*/
0
Heretic Monkey 13 मार्च 2021, 21:35

आपके कोड में समस्या यह है कि यह मानता है कि सरणी में ith मान चाहिए ऑब्जेक्ट की ith कुंजी के अनुरूप होना चाहिए, लेकिन उस आदेश की गारंटी नहीं है।

यहां एक कार्यात्मक प्रोग्रामिंग शैली समाधान है, जो लौटाई गई वस्तु के निर्माण के लिए Obect.fromEntries का उपयोग करता है:

const select = (arr, obj) =>
    Object.fromEntries(arr.filter(key => key in obj).map(key => [key, obj[key]]));

var arr = ['a', 'c', 'e'];
var obj = {a: 1,b: 2,c: 3,d: 4};
var output = select(arr, obj);
console.log(output);
1
trincot 13 मार्च 2021, 21:38