javascript - 从 JSON 数组的数组属性中提取值

标签 javascript arrays json lodash

我有一个元素数组,每个元素都非常复杂,因为它的属性是包含其他数组作为属性的数组。我想提取这个元素的几个属性,我尝试过使用 forEach 函数,但它不起作用。

数组来自json文件,这就是我使用axios的原因,数组的元素是这样的:

{
    "ITEMS":[
        {
            "id":"0001",
            "name":"foo",
            "sizes":[
                {
                    "name":"small",
                    "id":"9999",
                    "available":"no"
                },
                {
                    "name":"medium",
                    "id":"9998",
                    "available":"yes"
                }
            ]
        },

        {
            "id":"0002",
            "name":"bar",
            "sizes":[
                {
                    "name":"small",
                    "id":"4444",
                    "available":"yes"
                },
                {
                    "name":"medium",
                    "id":"4443",
                    "available":"no"
                }
            ]
        },
        ...
    ]
}

所以我想收集它们的属性,创建被推送到数组中并复制此模型的元素:

this.sample = {
    colour:'item.name',
    size:'item.size.name[i]',
    idcode:'item.id',
    sizecode:'item.size.id[i]',
    available:'item.size.available[i]'
}

这是我的尝试(不起作用)

const axios = require('axios');
class IndianaJones {
    constructor(){
        this.sample = {
            name:'',
            colour:'',
            size:'',
            idcode:'',
            sizecode:'',
            available:''
        },
        this.newids = ["10","11","12"...]
        this.freshprods = []
    }

    async FreshProd(){
        for(this.i=0;this.i<this.newids.length;this.i++){
            this.prod = await axios.get(`https://blablabla/${this.newids[this.i]}.json`)
            this.ITEMS.forEach(function(item){
                this.sample.idcode=item.id;
                this.sample.colour=item.name;
                item.sizes.forEach(function(SIZE){
                    this.sample.size=SIZE.name
                    this.sample.sizecode=SIZE.id
                    this.sample.available=SIZE.available
                    this.freshprods.push(this.sample)
                })
            }
            )
        }
        return this.freshprods
    }
}

(async()=>{
    const indiana = new IndianaJones();
    await indiana.FreshProd()
})()

真的,这让我陷入困境,我会非常感谢任何可以帮助我的人,也许 LODASH 会有用?

最佳答案

您正在尝试使结构扁平化。为此,您可以使用Array.flatMap()(或lodash的_.flatMap()来迭代ITEMS,映射尺寸 数组,并为每个大小返回一个新对象:

const prods = {"ITEMS":[{"id":"0001","name":"foo","sizes":[{"name":"small","id":"9999","available":"no"},{"name":"medium","id":"9998","available":"yes"}]},{"id":"0002","name":"bar","sizes":[{"name":"small","id":"4444","available":"yes"},{"name":"medium","id":"4443","available":"no"}]}]};

const freshprods = prods.ITEMS.flatMap(
    ({ id: idcode, name: colour, sizes }) =>
        sizes.map(o => ({
            colour,
            size: o.name,
            idcode,
            sizecode: o.id,
            available: o.available
        }))
);

console.log(freshprods);

关于javascript - 从 JSON 数组的数组属性中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539469/

相关文章:

python - json2html,Python : json data not converted to html

javascript - 在 Firefox 中注销后无法关闭选项卡

java - 双数组到 boolean 数组,在 java 中进行逻辑运算

mysql - 在 echo 时返回 mysql_fetch_array 列表而不重复其他文本

javascript - jQuery 字符串分割问题

javascript - Postman - 如何计算 JSON 响应中特定对象的出现次数

javascript - 什么是自执行匿名函数或这段代码在做什么?

php - 如何从 JavaScript 读取 PHP 变量?

javascript - html表格标题与表格float_Thead不对齐

javascript - 如何将 JSON 对象重新持久化为具有关联方法的对象?