Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

110
Visualizações
How to reorder an array of objects using other array that has index and returns the new ordered array

What I want exactly is a function that we can pass two arrays, one the original array of objects with specific order, and the other is an array of objects that has the new target index so the function will return the original array to new order based on the indexes

For example : this is how the original array will look like

const columns=[
      {

        field: "name",
        type: "action",
        width: settings.defaultColumnWidth,
      },
      {
        field: "country",
        type: "action",
        width: settings.defaultColumnWidth,
      
      },
      {
        field: "phone",
        type: "action",
        width: settings.defaultColumnWidth,            
      },
      {
        field: "email",
        type: "action",
        width: settings.defaultColumnWidth,
        
      },
    ] 

And the other array that have objects with fields name and the target index to be ordered

const newOrder = [
  {
    field: "country"
    oldIndex: 1
    targetIndex: 2
  },
]

So the new array that should be returned from the function will be like this

  const columns=[
  {

    field: "name",
    type: "action",
    width: settings.defaultColumnWidth,
  },
  {
    field: "phone",
    type: "action",
    width: settings.defaultColumnWidth,            
  },
  {
    field: "country",
    type: "action",
    width: settings.defaultColumnWidth,

  },
  {
    field: "email",
    type: "action",
    width: settings.defaultColumnWidth,

  },
] 

I hope my question is clear, thanks in advance for your help

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

You can achieve this with swapping technique.

var settings = {
  defaultColumnWidth: 6
}

const columns=[
    {

        field: "name",
        type: "action",
        width: settings.defaultColumnWidth,
    },
    {
        field: "country",
        type: "action",
        width: settings.defaultColumnWidth,
      
    },
    {
        field: "phone",
        type: "action",
        width: settings.defaultColumnWidth,            
    },
    {
        field: "email",
        type: "action",
        width: settings.defaultColumnWidth,
    },
];
    
const newOrder = [
    {
        field: "country",
        oldIndex: 1,
        targetIndex: 2
    },
];

newOrder.forEach(function(order) {
  // swapping
  let temp = columns[ order['targetIndex'] ];
  columns[ order['targetIndex'] ] = columns[ order['oldIndex'] ];
  columns[ order['oldIndex'] ] = temp;
});

console.log( columns );

about 4 years ago · Juan Pablo Isaza Relatório

0

Assuming there won't be too much contradiction, I think splice and such should work.

var settings = {
  defaultColumnWidth: 12
}

const columns = [{
    field: "name",
    type: "action",
    width: settings.defaultColumnWidth
  },
  {
    field: "country",
    type: "action",
    width: settings.defaultColumnWidth
  },
  {
    field: "phone",
    type: "action",
    width: settings.defaultColumnWidth
  },
  {
    field: "email",
    type: "action",
    width: settings.defaultColumnWidth
  }
]

const newOrder = [{
    field: "country",
    oldIndex: 1,
    targetIndex: 2
  }
];



newOrder.forEach(function(item) {
  var field = item.field
  var targetIndex = item.targetIndex
  for (var i = 0; i < columns.length; i++) {
    var column = columns[i];
    if (column.field == field) {
      var elem = columns.splice(i, 1)[0];
      columns.splice(targetIndex, 0, elem);
      break;
    }
  }
})

console.log(columns);
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

about 4 years ago · Juan Pablo Isaza Relatório

0

Here is a simple version

Array.prototype.move = function(from, to) { this.splice(to, 0, this.splice(from, 1)[0]);};
const columns = [{ field: "name", type: "action", width: "settings.defaultColumnWidth", }, { field: "country", type: "action", width: "settings.defaultColumnWidth", }, { field: "phone", type: "action", width: "settings.defaultColumnWidth", }, { field: "email", type: "action", width: "settings.defaultColumnWidth", }, ];
const newOrder = [{ field: "country", oldIndex: 1, targetIndex: 2 } ];

newOrder.forEach(({ field, oldIndex, targetIndex }) => columns[oldIndex].field === field &&  columns.move(oldIndex,targetIndex));

console.log(columns)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda