简体   繁体   English

如果未使用javascript定义元素,则从嵌套数组中删除数组对象

[英]remove array object from nested array if element is undefined using javascript

Raw array 原始数组

myArr = [
{name:'abcd',values:[undefined,{quarter: "Q2-2016", koordinaten: 119},{quarter: "Q3-2016", koordinaten: 129},undefined]},
{name:'abcd',values:[undefined,undefined,{quarter: "Q4-2016", koordinaten: 19},undefined]}
]

Expected array, 预期数组,

 myArr = [
        {name:'abcd',values:[{quarter: "Q2-2016", koordinaten: 119},{quarter: "Q3-2016", koordinaten: 129}},
        {name:'abcd',values:[{quarter: "Q4-2016", koordinaten: 19}]}
        ]

i want to remove undefined element with index in result array, 我想删除结果数组中带有索引的未定义元素,

Try map and filter 尝试mapfilter

myArr.map( s => (s.values = s.values.filter( p => JSON.stringify(p) != "{}" ), s ) );

Demo 演示版

 var myArr = [ {name:'abcd',values:[{undefined},{quarter: "Q2-2016", koordinaten: 119}, {quarter: "Q3-2016", koordinaten: 129},{undefined}]}, {name:'abcd',values:[{undefined},{undefined},{quarter: "Q4-2016", koordinaten: 19},{undefined}]} ]; var output = myArr.map(s => (s.values = s.values.filter(p => JSON.stringify(p) != "{}"), s)); console.log(output); 

This should do the trick, you basically need to remove all the undefined values by looping through them. 这应该可以解决问题,您基本上需要通过遍历所有未定义的值来删除它们。

 myArr = [ {name:'abcd',values:[undefined,{quarter: "Q2-2016", koordinaten: 119},{quarter: "Q3-2016", koordinaten: 129},undefined]}, {name:'abcd',values:[undefined,undefined,{quarter: "Q4-2016", koordinaten: 19},undefined]} ] myArr.forEach(arrItem => { arrItem.values = arrItem.values.filter(x => !!x); }); console.log(myArr); 

You could filter falsy values (like undefined ) with Array#filter and Boolean as callback. 您可以使用Array#filterBoolean作为回调来过滤虚假值(如undefined )。

 var array = [{ name: 'abcd', values: [undefined, { quarter: "Q2-2016", koordinaten: 119 }, { quarter: "Q3-2016", koordinaten: 129 }, undefined] }, { name: 'abcd', values: [undefined, undefined, { quarter: "Q4-2016", koordinaten: 19 }, undefined] }]; array.forEach(function (o) { o.values = o.values.filter(Boolean); }); console.log(array); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

You can use, underscore for such kind of tasks. 您可以将下划线用于此类任务。

Compact method 紧凑的方法

 myArr = [{ name: 'abcd', values: [undefined, { quarter: "Q2-2016", koordinaten: 119 }, { quarter: "Q3-2016", koordinaten: 129 }, undefined] }, { name: 'abcd', values: [undefined, undefined, { quarter: "Q4-2016", koordinaten: 19 }, undefined] }] // Cleansed Array myArr = myArr.map(function(arrItem) { arrItem.values = _.compact(arrItem.values); return arrItem }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM