如何将其他名称对象放置到数组的最后位置?

时间:2019-03-18 18:30:37

标签: javascript reactjs react-native

我有一个数组对象,在下面给出-

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

,想将 others 对象移动到数组的最后一个位置,我也不知道该对象的索引值。

谢谢

5 个答案:

答案 0 :(得分:0)

您可以先将其过滤掉,然后再推到底:

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);

答案 1 :(得分:0)

您可以先获取索引,将其剪接并推动展开的数组。

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; }

答案 2 :(得分:0)

  

我也不知道该对象的索引值

为此,您可以使用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)

答案 3 :(得分:0)

首先,您可以解析该数组并创建两个数组,一个数组的元素将保留在原位,另一个数组的元素将放置在末尾。然后,您可以加入这两个数组。

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);

答案 4 :(得分:0)

或者您可以使用递归。该程序具有明显的优势,因为它无需在开始计算之前就找到元素(或索引)-

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" }
// ]

注意,原始输入是 not 突变的。如果找到多个与查询匹配的标签,则所有所有都将移至数组的末尾。