代码之家  ›  专栏  ›  技术社区  ›  Milan Velebit

通过对象的键数组来分解对象

  •  0
  • Milan Velebit  · 技术社区  · 7 年前

    let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}
    

    以及它的一些键的数组:

    let arr_of_keys = ["a", "d", "e"]
    

    是否可以使用数组中的预定义键来分解对象,例如:

    let {...arr_of_keys} = obj;
    

    最终得到:

    2 回复  |  直到 7 年前
        1
  •  1
  •   Adrian    7 年前

    你想要一个简单的 .reduce 方法如下:

    var result = arr_of_keys.reduce(function(o,item){
    
        if(obj.hasOwnProperty(item)){
            o[item] = obj[item]; 
        }
    
      return o;
    }, {});
    

    举个例子:

    let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}
    let arr_of_keys = ["a", "d", "e", "f"];
    
    var result = arr_of_keys.reduce(function(o,item){
    
    	if(obj.hasOwnProperty(item)){
      	o[item] = obj[item]; 
      }
      
      return o;
    }, {});
    
    console.log(result)

    JSFiddle

        2
  •  1
  •   webpreneur    7 年前

    下面是针对所提供问题的一个可能的帮助函数。为了节省资源,我添加了一个set转换来删除可能的重复。还以控制台错误消息的形式添加了简单的错误处理。

    const obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}
    
    const arr_of_keys = ["a", "d", "e"];
    
    
    const customObjectDescructurer = (arrayOfDesiredPropKeys, object) => {
    
      const setOfDesiredPropKeys = new Set(arrayOfDesiredPropKeys);
      
      const filteredObject = [...setOfDesiredPropKeys].reduce(
        (filteredObject, desiredPropKey) => {
          if(object.hasOwnProperty(desiredPropKey)){
            filteredObject[desiredPropKey] = object[desiredPropKey];
          } else {
            console.error(`
              The given ${desiredPropKey}, does not exist in ${object} object.
            `);
          }
          return filteredObject;
        }, {});
    
      return filteredObject;
      
    }
    
    
    const desiredKeys = customObjectDescructurer(arr_of_keys, obj);
    
    console.log(desiredKeys);