[英]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.