提取js对象数组中单个键的所有值

问题描述 投票:0回答:3

我有一个json的对象集合

{  
   "images":{  
      "1":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"d66f00cf58c4fbbbc9703efff9c7694c"
         },
         "image_reference":1
      },
      "2":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"5485a21d47e3815cd7f23d5f8a8c8677"
         },
         "image_reference":2
      },
      "3":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"4df10b887f12d65f2f541c99f0dd1ef8"
         },
         "image_reference":3
      }
   }
}

有没有一种简单的方法来提取由下划线分隔的字符串中的hashed_filename值?

我需要像d66f00cf58c4fbbbc9703efff9c7694c_5485a21d47e3815cd7f23d5f8a8c8677_4df10b887f12d65f2f541c99f0dd1ef8这样的结果

javascript
3个回答
6
投票

是。从对象获取所有值作为数组,从数组中的每个对象获取image_data.hashed_filename,然后使用_连接所有值。

Object.values(obj.images).map(x => x.image_data.hashed_filename).join('_')

但是,在评估Object.values(obj.images)时,不能保证值的顺序,因为JS中的对象是无序的。

要按键排序,请从对象获取密钥,对密钥进行排序,获取每个密钥的值。然后映射到image_data.hashed_filename并加入(与之前相同)。

Object.keys(obj.images).sort().map(x => obj.images[x])
  .map(x => x.image_data.hashed_filename).join('_')

0
投票

是的,这是可能的。你可以这样做:

var o = {  
   "images":{  
      "1":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"d66f00cf58c4fbbbc9703efff9c7694c"
         },
         "image_reference":1
      },
      "2":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"5485a21d47e3815cd7f23d5f8a8c8677"
         },
         "image_reference":2
      },
      "3":{  
         "image_data":{  
            "votable":true,
            "hashed_filename":"4df10b887f12d65f2f541c99f0dd1ef8"
         },
         "image_reference":3
      }
   }
};

var result = Object.keys(o.images).reduce((acc, key) => {
    acc += (acc ? "_" : "") + o.images[key].image_data.hashed_filename; 
    return acc;
},"")

console.log(result);

在这里,你可以找到更多关于Object.keysArray.reduce的信息


0
投票
    var result = "";
    var findByValue = function (o, key) {           
        var p;
        for (p in o) {                
            if (o.hasOwnProperty(p) && typeof o[p] === 'object') {                    
                if (o[p][key])
                {                                           
                    result += o[p][key] + "_";                        
                }
                findByValue(o[p], key);                                       
           }
        }       
    };
    findByValue(_data, "hashed_filename");
    console.log(result.substring(0, result.length -1));
© www.soinside.com 2019 - 2024. All rights reserved.