【发布时间】:2017-01-19 22:55:53
【问题描述】:
我有一个“N”数组Objets,我需要做的是恢复或仅将那些Objets 保留在同一数组或另一个数组中,其中键newField 的值与所有数组相同Array 中的Objects。注意:新的Array 或最终的Array 每个重复元素只能有一个对象。
注意 2:我必须编辑它,因为它的返回值必须在所有对象中都是通用的。例如,如果有 3/3 个对象具有相同的 newField,它将返回一个,如果 2/3 个对象具有相同的 newField,则不会返回任何内容
这就是我所拥有的,但它真的什么都不是……:/
(这是来自 Angular 2 的过滤器) 我将不胜感激任何帮助。
谢谢
export class BucketPipe implements PipeTransform {
public arr = []
transform(value: any, args?: any): any {
return this.seleccion(value);
}
seleccion(value) {
console.log("val: " +JSON.stringify(value))
var newValue = new Array()
for(var i = 0; i < value.length; i++) {
for(var y = 0; y < value[i].length; y++) {
if(value[i][y]) {
var val = value[i][y]
do {
newValue.push(value[i][y])
val = value[i][y]
} while (value[i][y].newField !== val.newField)
}
}
}
return this.filter(newValue)
}
filter(values) {
var field: string[] = new Array()
for(var i = 0; i < values.length; i++) {
Object.keys(values[i]).map((obj,key) => {
if(values[i].newField == values[i][obj]) field.push(values[i])
})
}
this.arr = field
var result = [];
this.arr.forEach((subArr, index) => {
if(this.validate(subArr, index))
result.push(subArr);
});
console.log("Result: ",result)
}
validate(subArr, index) {
var test = true;
for(var i = 0; i < subArr.length && test; i++){
var obj = subArr[i];
var subtest = false;
for(var j = 0; j < this.arr.length && !subtest; j++){
if(index == j) continue;
var found = this.arr[j].find(function(e){
return e["newField"] == obj["newField"];
});
if(found) subtest = true;
}
test = test && subtest;
}
return test;
}
}
这是一个数组的例子:
[[{"id":42,
"idBucket":"patrimonial",
"originalField":"c",
"newField":"nCliente",
"name":"Número Cliente",
"description":"Número del Cliente",
"filter":true,
"visible":true,
"idDataType":1},{"id":43,
"idBucket":"patrimonial",
"originalField":"ct",
"newField":"nContrato",
"name":"Número Contrato",
"description":"Número de Contrato",
"filter":true,
"visible":true,
"idDataType":1},{"id":45,
"idBucket":"patrimonial",
"originalField":"s",
"newField":"sucursal",
"name":"Sucursal",
"description":"Sucursal",
"filter":true,
"visible":true,
"idDataType":1
},{"id":47,
"idBucket":"patrimonial",
"originalField":"sp",
"newField":"sProducto",
"name":"Subproducto",
"description":"Subproducto",
"filter":true,
"visible":true,
"idDataType":1
}],
[{
"id":11,
"idBucket":"expunic",
"originalField":"nc",
"newField":"nCliente",
"name":"Número Cliente",
"description":"Número del Cliente",
"filter":true,
"visible":true,
"idDataType":1
},{
"id":12,
"idBucket":"expunic",
"originalField":"t",
"newField":"titulo",
"name":"Título Aplicación",
"description":"Título de la Aplicación o Gaveta",
"filter":true,
"visible":true,
"idDataType":1
}],
[{
"id":16,
"idBucket":"bastanteo",
"originalField":"t",
"newField":"titulo",
"name":"Título Aplicación",
"description":"Nombre de la Gaveta",
"filter":true,
"visible":true,
"idDataType":1
}]]
在此示例中将不返回任何内容,因为常见的 newField 值是“titulo”,但它仅在数组位置 1 和 2 中,但不在 0 中,如果 newField 值“titulo”在所有 3 中,它将返回一个新的只有一个 Object 的数组,不在乎 3 个中的一个。
另一个例子
[[{
"id":11,
"idBucket":"expunic",
"originalField":"nc",
"newField":"nCliente",
"name":"Número Cliente",
"description":"Número del Cliente",
"filter":true,
"visible":true,
"idDataType":1
},{
"id":12,
"idBucket":"expunic",
"originalField":"t",
"newField":"titulo",
"name":"Título Aplicación",
"description":"Título de la Aplicación o Gaveta",
"filter":true,
"visible":true,
"idDataType":1
}],
[{
"id":16,
"idBucket":"bastanteo",
"originalField":"t",
"newField":"titulo",
"name":"Título Aplicación",
"description":"Nombre de la Gaveta",
"filter":true,
"visible":true,
"idDataType":1
}]]
在此示例中,它将返回一个Object,因为在所有 2 个对象中,newField 的值相同,而不关心两者中的哪一个。虽然如果阵列共有 10 个对象,则 10 个 Objects 必须是相同的 newField 值。请注意,只有当所有 Objects 共有 2 个 newFields 值时,才能返回超过 2 个 Objects
【问题讨论】:
-
发布一个数组结构示例以及该示例的预期结果。
-
我刚刚用数组 @ibrahimmahrir 的例子编辑了帖子,我想要一个新的对象数组,只有当 newField 在所有原始对象中重复时
-
因此,在本例中,新数组将仅包含 ID 为 12 和 16 的对象。对吧?
-
不,因为 12 和 16 是“titulo”,但“titulo”仅位于数组位置 1 和 2,而不是 0 @ibrahimmahrir 此示例不返回任何内容,但如果“titulo”在所有3 个对象将只返回一个新数组中的一个对象。 :)
-
这个数组的结果是什么。发布所需的输出(无需发布所有内容,只需包含 ID 的数组即可)。如果可能的话,加上解释(解释为什么一个元素在结果数组中)
标签: javascript arrays loops object matrix