jQuery / Lodash-通过键获取多个嵌套的json值

时间:2018-07-24 08:58:02

标签: javascript jquery lodash

我已经生成了一组用于其他功能的json。

window.customJSON = {
  "1894873974": {
    title: "Yellow",
    images: [
      {
      main: "/images/img1.jpg",
      alt: "image alt tag"
      },
      {
      main: "/images/img2.jpg",
      alt: "image alt tag"
      }
    ]
  },
  "2397423987": {
    title: "Orange",
    images: [
      {
      main: "/images/img1.jpg",
      alt: "image alt tag"
      }
    ]
  }
}

我想做的是获取所有图像在“图像”中所有“主”值,并将它们分配到单个数组中。数字代表唯一的代码,因此我不是要获取特定的索引,而是要获取所有图像网址。

我正在使用lodash成功映射其他内容,因此我尝试使用:

var imgArray = _.map(window.customJSON.images, 'main');

我只是不太确定正确的语法。我浏览了lodash文档,但没有找到合适的单词组合来获取答案。

jQuery或lodash解决方案都可以使用。

谢谢

2 个答案:

答案 0 :(得分:1)

在映射flatMap属性之前,您需要先images main。请参见下面的工作演示:

let customJSON = {
  "1894873974": {
    title: "Yellow",
    images: [{
        main: "/images/img1.jpg",
        alt: "image alt tag"
      },
      {
        main: "/images/img2.jpg",
        alt: "image alt tag"
      }
    ]
  },
  "2397423987": {
    title: "Orange",
    images: [{
      main: "/images/img1.jpg",
      alt: "image alt tag"
    }]
  }
}

let result = _(customJSON)
  .flatMap('images')
  .map('main')
  .value();

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

如果仅需要获取唯一值,则在uniq()之前也应用value()

答案 1 :(得分:0)

环绕对象键并映射图像。

let customJSON = {
  "1894873974": {
    title: "Yellow",
    images: [
      {
      main: "/images/img1.jpg",
      alt: "image alt tag"
      },
      {
      main: "/images/img2.jpg",
      alt: "image alt tag"
      }
    ]
  },
  "2397423987": {
    title: "Orange",
    images: [
      {
      main: "/images/img1.jpg",
      alt: "image alt tag"
      }
    ]
  }
}

let res = [];
for(var key in customJSON) {
  let images = customJSON[key]['images'];
  res = res.concat(images.map(image => image.main))
}
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.js"></script>