繁体   English   中英

如何从 JavaScript 中的数组中获取不同的值?

[英]How to get distinct values from array in JavaScript?

假设我有以下内容:

变量数组 =

[
    {"name":"Joe", "age":null, "date":"1959-08-10", "home":"ny"}
],
[
    {"name":"Bill", "age":null, "date":"1956-08-10", "home":"tx"}
],
[
    {"name":"Joe", "age":"17", "date":null, "home":"ny"}
],
[
    {"name":null, "age":"17", "date":"1956-08-10", "home":"tx"}
],
[
    {"name":"Joe", "age":"17", "date":"1959-08-10", "home":null}
]

获得新数组的最佳方法是什么:

var new_array =

[
    {"name":"Joe", "age":"17", "date":"1959-08-10", "home":"ny"}
],
[
    {"name":"Bill", "age":"17", "date":"1956-08-10", "home":"tx"}
]

基本上有四个选项可供您使用:常规循环或 map、过滤器、数组实例上的归约函数,例如:

var oldArray = [1, 2, 3, 4, 5];
var newArray = oldArray.filter((item) => item > 2); // Gives you [3, 4, 5] 

查看mdn以获得更具体的描述。 此链接用于过滤,但 map 和 reduce 可以在左侧面板中找到。

编辑循环方法:

var oldArray = [1, 2, 3, 4, 5];
var newArray = [];

for (var item of oldArray) {
  if (item > 2) {
    newArray.push(item);
  }
}
newArray; // Gives you [3, 4, 5]

比尔和乔是参考点。
您需要遍历数组并测试名称并存储(在另一个数组中)非空值。
另外,只有两个名字吗?
您可能需要允许可变数量的名称。
这远非完整的代码,但希望能帮助您入门。
也看看foreach
您至少需要展示您为使讨论和调试更容易所做的尝试!

var dataCollect=[];
for (i=0; i<array.length; i++) {    
    if (array[i]['name'] != null) { name = array[i]['name'];
    /* then your range of qualifiers gets complicated
eg. array[3] has no name so how to know what this relates to?
you probably need another internal loop to test !=null
to get values for x y z */
    dataCollect.push ({
name: name,
age: 'x',
date: 'y',
home: 'z'
    });
}

请提供一些代码来展示您如何尝试使用它。

假设我有以下内容:

变量数组 =

[
    {"numberUnique1":"123456789", "numberUnique2":null, "name":null, "date":"1959-08-10", "kinship":null}
],
[
    {"numberUnique1":"987654123", "numberUnique2":"15935478", "name":"Joe", "date":null, "kinship":null}
],
[
    {"numberUnique1":"123456789", "numberUnique2":"258369147", "name":null, "date":"1959-08-10", "kinship":null}
],
[
    {"numberUnique1":null, "numberUnique2":"15935478", "name":null, "date":"1976-09-14", "kinship":"dad"}
],
[
    {"numberUnique1":"123456789", "numberUnique2":null, "name":"Bill", "date":"1959-08-10", "kinship":"son"}
]

获得新数组的最佳方法是什么:

var new_array =

[
    {"numberUnique1":"123456789", "numberUnique2":258369147, "name":"Bill", "date":"1959-08-10", "kinship":"son"}
],
[
    {"numberUnique1":"987654123", "numberUnique2":"15935478", "name":"Joe", "date":"1976-09-14", "kinship":"dad"}
]

是这样解决的(不知道有没有更好的办法):

new_array = [];
if (array.length > 0) {
    new_array.push(array[0]);
    let aux = 1;
    let qtd = 0;
    m:for (var i = 1; i < array.length; i++) {
        for (var ii = 0; ii < aux; ii++) {
            if ( (new_array[ii].numberUnique1 != array[i].numberUnique1) && (!!new_array[ii].numberUnique1) && (!!array[i].numberUnique1) ) {
                for (var iii = 0; iii < new_array.length; iii++) {
                    if (new_array[iii].numberUnique1 == array[i].numberUnique1) {
                        qtd = qtd + 1;
                    }
                }
                if (qtd == 0) {    
                    new_array.push(array[i]);
                    if ( (new_array.length < array.length) ) {
                        aux = aux + 1;
                        continue m;
                    }
                }
            } else if ( (new_array[ii].numberUnique1 == array[i].numberUnique1) && (!!new_array[ii].numberUnique1) && (!!array[i].numberUnique1) ) {
                if ( (!new_array[ii].numberUnique2) &&  (!!array[i].numberUnique2) ) {
                    new_array[ii].numberUnique2 = array[i].numberUnique2;
                }
                if ( (!new_array[ii].name) &&  (!!array[i].name) ) {
                    new_array[ii].name = array[i].name;
                }
                if ( (!new_array[ii].date) &&  (!!array[i].date) ) {
                    new_array[ii].date = array[i].date;
                }
                if ( (!new_array[ii].kinship) &&  (!!array[i].kinship) ) {
                    new_array[ii].kinship = array[i].kinship;
                }
            } else {
                if ( (new_array[ii].numberUnique2 != array[i].numberUnique2) && (!!new_array[ii].numberUnique2) && (!!array[i].numberUnique2) ) {
                    for (var iii = 0; iii < new_array.length; iii++) {
                        if (new_array[iii].numberUnique2 == array[i].numberUnique2) {
                            qtd = qtd + 1;
                        }
                    }
                    if (qtd == 0) {    
                        new_array.push(array[i]);
                        if ( (new_array.length < array.length) ) {
                            aux = aux + 1;
                            continue m;
                        }
                    }
                } else if ( (new_array[ii].numberUnique2 == array[i].numberUnique2) && (!!new_array[ii].numberUnique2) && (!!array[i].numberUnique2) ) {
                    if ( (!new_array[ii].numberUnique1) &&  (!!array[i].numberUnique1) ) {
                        new_array[ii].numberUnique1 = array[i].numberUnique1;
                    }
                    if ( (!new_array[ii].name) &&  (!!array[i].name) ) {
                        new_array[ii].name = array[i].name;
                    }
                    if ( (!new_array[ii].date) &&  (!!array[i].date) ) {
                        new_array[ii].date = array[i].date;
                    }
                    if ( (!new_array[ii].kinship) &&  (!!array[i].kinship) ) {
                        new_array[ii].kinship = array[i].kinship;
                    }
                } else {
                    if ( (new_array[ii].name != array[i].name) && (!!new_array[ii].name) && (!!array[i].name) ) {
                        for (var iii = 0; iii < new_array.length; iii++) {
                            if (new_array[iii].name == array[i].name) {
                                qtd = qtd + 1;
                            }
                        }
                        if (qtd == 0) {    
                            new_array.push(array[i]);
                            if ( (new_array.length < array.length) ) {
                                aux = aux + 1;
                                continue m;
                            }
                        }
                    } else if ( (new_array[ii].name == array[i].name) && (!!new_array[ii].name) && (!!array[i].name) ) {
                        if ( (new_array[ii].date == array[i].date) && (!!new_array[ii].date) && (!!array[i].date) ) {
                            if ( (new_array[ii].kinship == array[i].kinship) && (!!new_array[ii].kinship) && (!!array[i].kinship) ) {
                                if ( (!new_array[ii].numberUnique1) &&  (!!array[i].numberUnique1) ) {
                                    new_array[ii].numberUnique1 = array[i].numberUnique1;
                                }
                                if ( (!new_array[ii].numberUnique2) &&  (!!array[i].numberUnique2) ) {
                                    new_array[ii].numberUnique2 = array[i].numberUnique2;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

暂无
暂无

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

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