JavaScript:如何更改数组中对象的属性名称?

时间:2018-08-30 23:17:31

标签: javascript reactjs react-select

我正在使用此react-selecthttps://github.com/JedWatson/react-select

所需的期权数据格式为:

const options = [
    { value: 'chocolate', label: 'Chocolate' },
    { value: 'strawberry', label: 'Strawberry'},
    { value: 'vanilla', label: 'Vanilla' }
];

我的数组设置如下:

const columns = [
    { name: 'OrderNumber', title: 'Order Number' },
    { name: 'strawberry', title: 'Strawberry' },
    { name: 'vanilla', title: 'Vanilla' }
]

我无法更改阵列。如果尝试在我的选项中使用namevalue,则在select-react中使用它们会遇到问题。如果我将name更改为value,则会填充选择选项,但是我不想这样做。

有人可以教我如何将数组的name更改为value吗?

3 个答案:

答案 0 :(得分:6)

您可以使用.map()函数使columns中的数据适合与react-select一起使用。

.map()类型的Array函数可用。它从您调用它的数组创建一个新数组,并允许您提供一个函数,该函数在从原始数组中复制每个项目时对其进行转换/更改。

您可以按以下方式使用它:

const columns = [
    { name: 'OrderNumber', title: 'Order Number' },
    { name: 'strawberry', title: 'Strawberry' },
    { name: 'vanilla', title: 'Vanilla' }
]

const options = columns.map(function(row) {

   // This function defines the "mapping behaviour". name and title 
   // data from each "row" from your columns array is mapped to a 
   // corresponding item in the new "options" array

   return { value : row.name, label : row.title }
})

/*
options will now contain this:
[
    { value: 'OrderNumber', label: 'Order Number' },
    { value: 'strawberry', label: 'Strawberry' },
    { value: 'vanilla', label: 'Vanilla' }
];
*/

有关更多信息,请see the MDN documentation for .map()

答案 1 :(得分:2)

如果您只想将name属性重命名为value,则可以使用map并将name属性破坏为value,然后选择其余的属性

const columns = [
    { name: 'OrderNumber', title: 'Order Number' },
    { name: 'strawberry', title: 'Strawberry' },
    { name: 'vanilla', title: 'Vanilla' }
];

const newColumns = columns.map( item => {
  const { name: value, ...rest } = item;
  return { value, ...rest }
 }
);

console.log( newColumns );

但是,我怀疑您会想要这样做,因为react-selecttitle中不起作用(据我所知)。我猜它正在等待label道具。如果是这样,请按照@Dacre Denny的建议去更改所有属性。我喜欢箭头功能:)所以:

const newColumns = columns.map( item =>
  ( { value: item.name, label: item.title } )
);

答案 2 :(得分:2)

destructuring与重命名属性一起使用将简化操作。

const options = [
  { value: "chocolate", label: "Chocolate" },
  { value: "strawberry", label: "Strawberry" },
  { value: "vanilla", label: "Vanilla" },
];

const columns = options.map(({ value: name, label: title }) => ({
  name,
  title,
}));

console.log(columns);