如何在地图功能内部的对象中添加值?

时间:2019-07-01 10:10:52

标签: javascript node.js

我正在使用map函数来迭代对象。但在一种情况下,我必须使用嵌套地图功能。我尝试将值添加到map函数内的空对象中,但没有添加值,而是替换了它。有人可以帮我吗?

// object stores final results
let valid_data={}
//object to iterate
let test_cases = { 
sample:
   [ { test_case_no: 1,
       test_case_description: 'user-status active - response 200',
       value: 'active',
       response_code: 200,
       valid: 'yes' },
     { test_case_no: 2,
       test_case_description: 'user-status inactive - response 200',
       value: 'inactive',
       response_code: 200,
       valid: 'no' },
     { test_case_no: 3,
       test_case_description: ' inappropriate user-status - response 400',
       value: 'notAdmin',
       response_code: 400,
       valid: 'no' } ],
     sample1: [ { obj1: [Array], obj2: [Array], test_case_no: 4 } ] 
}

//my code to iterate an object

Object.entries(test_cases).map((property) => {
    const field_name = property[0]
    const field_definition = property[1]

    Object.entries(field_definition).map((property) => {
        if (property[1].valid != 'yes' && property[1].valid != 'no') {
            Object.entries(field_definition).map((property) => {
                Object.entries(property[1]).map((propertyy) => {
                    Object.entries(propertyy[1]).map((property) => {
                        nested_data = []
                        nested_value = {}
                        if (property[1].valid == 'yes') {
                            nested_value[propertyy[0]] = property[1].value
                            nested_data.push(Object.assign({}, nested_value))
                            valid_data[field_name] = (Object.assign({}, nested_value))
                        }
                    })
                })
            })
        }
        else if (property[1].valid == 'yes') {
            valid_data[field_name] = property[1].value;
        }
    })
})

console.log(valid_data);

实际结果:

“{ sample: 'active',
 sample1: { obj2: 2019-07-01T09:50:46.266Z } }” 

预期结果:

“{ sample: 'active',
 sample1: [{ obj1: 2019-07-01T09:50:46.266Z,obj2: 2019-07-01T09:50:46.266Z }] }”

2 个答案:

答案 0 :(得分:1)

您的代码中的var初始化错误。 尝试以下循环:

Object.entries(test_cases).map((property) => {
    const field_name = property[0]
    const field_definition = property[1]

    Object.entries(field_definition).map((property) => {
        if (property[1].valid != 'yes' && property[1].valid != 'no') {
            nested_value = {}
            Object.entries(property[1]).map((propertyy) => {

                Object.entries(propertyy[1]).map((property) => {

                    if (property[1].valid == 'yes') {
                        nested_value[propertyy[0]] = property[1].value;
                        valid_data[field_name] = (Object.assign({}, 
                        nested_value))
                    }
               })
            })
        } else if (property[1].valid == 'yes') {
            valid_data[field_name] = property[1].value;
        }
    })
});

Working jsfiddle

答案 1 :(得分:0)

Object.entries(test_cases).map((property) => {
    const field_name = property[0]
    const field_definition = property[1]

    Object.entries(field_definition).map((property) => {
        if (property[1].valid != 'yes' && property[1].valid != 'no') {
            nested_data = []
            nested_value = {}
            Object.entries(property[1]).map((propertyy) => {                
                Object.entries(propertyy[1]).map((property) => {
                    if (property[1].valid == 'yes') {
                        nested_value[propertyy[0]] = property[1].value;                       
                        if(!nested_data.includes(nested_value)){
                            nested_data.push(nested_value)
                        valid_data[field_name] = nested_data
                        }
                    }
               })
            })
        } else if (property[1].valid == 'yes') {
            valid_data[field_name] = property[1].value;
        }
    })
})