Как разместить объект с другим именем в последнюю позицию массива?

SUM() является агрегированной функцией. Он принимает все строки, которые возвращаются для группы, и добавляет их.

Поскольку у вас нет предложения GROUP BY, он суммирует значения всех строк, даже если их нет. Затем он возвращает общее число в виде одной строки, поэтому должна быть только 1 строка.

Если вы уточните, что хотите вернуть, я могу попытаться помочь вам написать заявление, чтобы вернуть его.

1
задан Pragati Kumari 18 March 2019 в 18:30
поделиться

5 ответов

Я также не знаю значение индекса этого объекта

, для которого вы можете использовать findIndex . Сначала получите индекс требуемого объекта, а в другой переменной получите последний объект в массиве. Затем поменяйте их местами

var arrayData = [{
    label: "data",
    value: "data"
  },
  {
    label: "data",
    value: "data"
  },
  {
    label: "Others",
    value: "Others"
  },
  {
    label: "data",
    value: "data"
  },
]

let findIndex = arrayData.findIndex(function(item) {
  return item.label === 'Others' && item.value === 'Others'
})
let storeLastVal = arrayData[arrayData.length - 1];
let otherVal = arrayData[findIndex]
arrayData[findIndex] = storeLastVal;
arrayData[arrayData.length - 1] = otherVal;
console.log(arrayData)

0
ответ дан brk 18 March 2019 в 18:30
поделиться

Хорошо, вы можете сначала проанализировать массив и создать два массива, один с элементами, которые останутся на месте, другой с элементами, которые будут размещены в конце. Затем вы можете присоединиться к этим двум массивам.

arrayData = [
{label:"data",value:"data"},
{label:"data",value:"data"},
{label:"Others",value:"Others"},
{label:"data",value:"data"},
]

var startValues = [];
var endValues = [];

arrayData.forEach((value) => {
  if (value.label === "Others") {
    endValues.push(value);
  } else {
    startValues.push(value);
  }
});

arrayData = startValues.concat(endValues);
0
ответ дан Cosmin Staicu 18 March 2019 в 18:30
поделиться

Вы можете сначала отфильтровать его, а затем вставить в конец:

var arrayData = [
  {label:"data",value:"data"},
  {label:"data",value:"data"},
  {label:"Others",value:"Others"},
  {label:"data",value:"data"},
]

var res = arrayData.filter(x => x.label !== 'Others');
res.push(arrayData.find(x => x.label === 'Others'));
    
console.log(res);

0
ответ дан ttulka 18 March 2019 в 18:30
поделиться

Вы могли бы сначала получить индекс, соединить этот элемент и выдвинуть расширенный массив.

var array = [{ label: "data", value: "data" }, { label: "data", value: "data" }, { label: "Others", value: "Others" }, { label: "data", value: "data" }],
    index = array.findIndex(({ value }) => value === 'Others');
    
array.push(...array.splice(index, 1));

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

0
ответ дан Nina Scholz 18 March 2019 в 18:30
поделиться

Или вы можете использовать рекурсию. Эта программа имеет явное преимущество в том, что ей не нужно находить элемент (или индекс) перед началом вычисления -

const data =
  [ { label: "data", value: "data" }
  , { label: "data", value: "data" }
  , { label: "Others", value: "Others" }
  , { label: "data", value: "data" }
  ]
  
const transform = ([ a, ...rest ]) =>
  a === undefined
    ? []
    : a.label === "Others"
        ? [ ...transform (rest), a ]
        : [ a, ...transform (rest) ]

console .log (transform(data))
// [ { label: "data", value: "data" }
// , { label: "data", value: "data" }
// , { label: "data", value: "data" }
// , { label: "Others", value: "Others" }
// ]

Очевидно, что вы, вероятно, должны сделать "Others" параметром функции -

const data =
  [ { label: "data", value: "data" }
  , { label: "data", value: "data" }
  , { label: "Others", value: "Others" }
  , { label: "data", value: "data" }
  ]
  
const transform = (query, [ a, ...rest ]) =>
  a === undefined
    ? []
    : a.label === query
        ? [ ...transform (query, rest), a ]
        : [ a, ...transform (query, rest) ]

console .log (transform ("Others", data))
// [ { label: "data", value: "data" }
// , { label: "data", value: "data" }
// , { label: "data", value: "data" }
// , { label: "Others", value: "Others" }
// ]

console .log (transform ("data", data))
// [ { label: "Others", value: "Others" }
// , { label: "data", value: "data" }
// , { label: "data", value: "data" }
// , { label: "data", value: "data" }
// ]

Обратите внимание, что исходный ввод не мутировал. Если найдено несколько меток, соответствующих запросу, все из них будут перемещены в конец массива.

0
ответ дан user633183 18 March 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: