Aqui está o meu primeiro formato de matriz JSON:
this.columnNames = [
{field : "Name"},
{field : "Address"},
{field : "Age"}
];
Aqui está o meu primeiro formato de matriz JSON:
this.rowData = [
{Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"},
{Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"},
{Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"},
{Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"},
];
Aqui eu quero comparar o VALUE que está presente no primeiro array(columnNames)
e KEYS que está presente no segundo array. Se for igual, quero enviar os dados correspondentes do segundo array(rowData)
para a nova matriz.
E eu quero o meu resultado final assim:
public rowData: any =[
{Name : "Praveen",Address : "aiff",Age : "12"},
{Name : "Akashay",Address : "xvn",Age : "15"},
{Name : "Bala",Address : "hjk",Age : "16"},
{Name : "Charu",Address : "sss",Age : "17"},
];
arrays
angular
comparison
Praveen Sivanadiyar
fonte
fonte
Respostas:
Pegue os campos de cada objeto em sua
columnNames
matriz usando.map()
. Em seguida, mapeie cada objetorowData
para um novo objeto criado usando.reduce()
, que inclui apenas as chaves da suafields
matriz:Se você puder oferecer suporte
Object.fromEntries()
(que[key, value]
utiliza uma matriz de pares aninhados e constrói um objeto a partir deles), não há necessidade de usar.reduce()
:fonte
Você pode
filter
propriedades do seu objeto com base nacolumnNames
matriz e, em seguida, basta criar um objeto usandoObject.fromEntries
:Um exemplo:
Ou versão mais depurável:
Um exemplo:
Object.fromEntries é o método que transforma uma lista de pares de valores-chave em um objeto.
A linha a seguir significa que filtramos () o
allProperies
array com base nocolumnNames
array.O método some () retorna
true
se alguma propriedade decolumnNames
existir emallProperties
:fonte
Armazene todos os nomes de campo em uma variável
keys
usando .map . Em seguida, percorra a matriz original e crie um objeto com as propriedades presentes emkeys
Tente assim:
Demonstração de trabalho
fonte
obj
é um novo objeto vazio.obj[key] = item[key]
significa que, no primeiro loop, a chave é "Nome", assimobj[key]
será{Name: }
eitem.Name
éPraveen
, portanto o resultado será{Name: "Praveen" }