【问题标题】:Javascript Compare Object key and array and return new objectJavascript比较对象键和数组并返回新对象
【发布时间】:2020-06-16 12:20:18
【问题描述】:

您能否帮助实现以下输出比较 var1 和 var2 并根据 var2 获得输出,其中键在数组字符串中提供

var1 = {a:1, b:2, c:3, d:4};
var2 = ['a', 'd'];

输出应该是:

var3 = {a:1, d:4};

【问题讨论】:

    标签: javascript arrays json oop es6-class


    【解决方案1】:
    const var3 = var2.reduce((acc, cur) => {
      if (var1[cur]) {
        acc[cur] = var1[cur];
      }
      return acc;
    }, {})
    

    https://jsfiddle.net/chp510nj/

    【讨论】:

    • 感谢我有用例的解决方案。例如,其中 key 在数组中不可用。 var var1 = {a:1,b:2,c:3,d:4}; var var2 =['a','d','f'];我有像 var3 = {a:1, d:4}; 这样的输出
    • @GauthamShetty 一个简单的if 将解决这个问题。见编辑
    【解决方案2】:

    使用.forEach

    var var1 = {a:1,b:2,c:3,d:4}; var var2 =['a','d'];
    var var3 = {};
    
    var2.forEach(i=>{
     var3[i] = var1[i]
    })
    
    
    console.log(var3)

    【讨论】:

    • 感谢我有用例的解决方案。例如,其中 key 在数组中不可用。 var var1 = {a:1,b:2,c:3,d:4}; var var2 =['a','d','f'];我有像 var3 = {a:1, d:4}; 这样的输出
    • 我没听懂你。您提供的案例仍然适用于此解决方案。
    【解决方案3】:

    你可以使用 Object.entries 和迭代

    var1 = {a:1,b:2,c:3,d:4}; var2 =['a','d'];
    o={}
    for(let [k,v] of Object.entries(var1)){
      var2.forEach(x=>{if(k==x){
            o[k]=v
      }})
    }
    console.log(o)
    

    【讨论】:

    • 感谢我有用例的解决方案。例如,其中 key 在数组中不可用。 var var1 = {a:1,b:2,c:3,d:4}; var var2 =['a','d','f'];我有像 var3 = {a:1, d:4}; 这样的输出
    【解决方案4】:

    您可以将.map() 中的每个键var2 指向一个包含该键及其关联值的对象。从该映射数组中,您可以使用 Object.assign() 将每个对象分配给一个对象:

    const var1 = {a:1,b:2,c:3,d:4};
    const var2 = ['a','d', 'f'];
    
    const var3 = Object.assign({}, ...var2.map(id => id in var1 ? {[id]: var1[id]} : {}));
    console.log(var3);

    如果您可以支持,另一种方法是使用Object.fromEntries()

    const var1 = {a:1,b:2,c:3,d:4};
    const var2 = ['a','d', 'f'];
    
    const var3 = Object.fromEntries(var2.filter(id => id in var1).map(id => [id, var1[id]]));
    console.log(var3);

    【讨论】:

    • 感谢我有用例的解决方案。例如,其中 key 在数组中不可用。 var var1 = {a:1,b:2,c:3,d:4}; var var2 =['a','d','f'];我有像 var3 = {a:1, d:4}; 这样的输出
    • @GauthamShetty 我已经更新了处理这些案例的答案
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多