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

Javascript 提取js对象数组中单个键的所有值,javascript,Javascript,我有一个json对象集合 { "images":{ "1":{ "image_data":{ "votable":true, "hashed_filename":"d66f00cf58c4fbbbc9703efff9c7694c" }, "image_reference":1 }, "2":{ "image_data

我有一个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
      }
   }
}
有没有一种简单的方法可以提取用下划线分隔的字符串中的散列文件名值


我需要一个类似于D66F00CF58C4FBBBC9703EFF9C7694C_5485a21d47e3815cd7f23d5f8a8c8677_4df10b887f12d65f2f541c99f0dd1ef8的结果是。以数组形式从对象获取所有值,从数组中的每个对象获取
图像\u数据。哈希\u文件名
,然后将所有值与
\u
合并

Object.values(obj.images).map(x => x.image_data.hashed_filename).join('_')
但是在计算
Object.values(obj.images)
时,无法保证值的顺序,因为对象在JS中是无序的

要按键排序,请从对象中获取键,对键进行排序,获取每个键的值。然后映射到
图像\u数据。散列的\u文件名
并加入(与之前相同)


对。以数组形式从对象获取所有值,从数组中的每个对象获取
图像\u数据。哈希\u文件名
,然后将所有值与
\u
合并

Object.values(obj.images).map(x => x.image_data.hashed_filename).join('_')
但是在计算
Object.values(obj.images)
时,无法保证值的顺序,因为对象在JS中是无序的

要按键排序,请从对象中获取键,对键进行排序,获取每个键的值。然后映射到
图像\u数据。散列的\u文件名
并加入(与之前相同)


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

var o={
“图像”:{
"1":{  
“图像数据”:{
“votable”:对,
“哈希_文件名”:“D66F00CF58C4FBBBC9703EFF9C7694C”
},
“图像参考”:1
},
"2":{  
“图像数据”:{
“votable”:对,
“哈希_文件名”:“5485a21d47e3815cd7f23d5f8a8c8677”
},
“图像参考”:2
},
"3":{  
“图像数据”:{
“votable”:对,
“哈希文件名”:“4df10b887f12d65f2f541c99f0dd1ef8”
},
“图像参考”:3
}
}
};
var result=Object.keys(o.images).reduce((acc,key)=>{
acc+=(acc?”216;“:”)+o.images[key]。image\u data.hashed\u文件名;
返回acc;
},"")

控制台日志(结果)是的,这是可能的。你可以这样做:

var o={
“图像”:{
"1":{  
“图像数据”:{
“votable”:对,
“哈希_文件名”:“D66F00CF58C4FBBBC9703EFF9C7694C”
},
“图像参考”:1
},
"2":{  
“图像数据”:{
“votable”:对,
“哈希_文件名”:“5485a21d47e3815cd7f23d5f8a8c8677”
},
“图像参考”:2
},
"3":{  
“图像数据”:{
“votable”:对,
“哈希文件名”:“4df10b887f12d65f2f541c99f0dd1ef8”
},
“图像参考”:3
}
}
};
var result=Object.keys(o.images).reduce((acc,key)=>{
acc+=(acc?”216;“:”)+o.images[key]。image\u data.hashed\u文件名;
返回acc;
},"")

控制台日志(结果)有时候,分享你为什么要做某事有助于回答者给你一个更好的答案。我知道,但在这种情况下并不容易…有时候,分享你为什么要做某事有助于回答者给你一个更好的答案。我知道,但在这种情况下不容易…请为答案添加更多解释。无论如何,+1如果我想维持秩序?@RobertoPezzali,就用object.keys方法吧。@Alexandru Ionut Mihai谢谢!已编辑。@RobertoPezzali对象在JS中是无序的。使用按键排序的解决方案更新了答案。请为答案添加更多解释。无论如何,+1如果我想保持顺序?@RobertoPezzali,只需使用object.keys方法即可。@Alexandru Ionut Mihai谢谢!已编辑。@RobertoPezzali对象在JS中是无序的。使用按键排序的解决方案更新了答案。
    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));