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

时间:2017-11-17 09:58:02

标签: javascript jquery

原始数组

function t1() {

        var v = document.getElementById('<%=pnlFiltri.ClientID %>');
        alert(v.children.length)
    }
 <asp:Panel ID="pnlFiltri" runat="server" DefaultButton="Upload">
            <asp:TextBox runat="server" type="text" ID="tb_Descr" name="Editbox1" value="" />
            <asp:TextBox runat="server" type="text" ID="TextBox1" name="Editbox1" value="" />
        </asp:Panel>

        <asp:Button ID="Upload" runat="server" Text="Upload" OnClientClick="t1();return false;" />

预期数组,

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]}
]

我想在结果数组

中删除带索引的未定义元素

4 个答案:

答案 0 :(得分:0)

尝试mapfilter

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

<强>演示

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);

答案 1 :(得分:0)

这应该可以解决问题,你基本上需要通过循环来删除所有未定义的值。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用falsyArray#filter作为回调过滤Boolean个值(例如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; }

答案 3 :(得分:0)

您可以使用下划线表示此类任务。

Compact方法

&#13;
&#13;
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
})
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
&#13;
&#13;