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

时间:2017-12-18 12:40:44

标签: javascript

我有一个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

这样的结果

3 个答案:

答案 0 :(得分: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('_')

答案 1 :(得分: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

的更多信息

答案 2 :(得分:0)

localhost:8080