用旧数组中的两列创建新数组

时间:2019-05-21 08:19:27

标签: javascript arrays object ecmascript-6

我有一个如下数组:

items = [
{"year": 2010, "month": 11, "day":23}
{"year": 2009, "month": 10, "day":15}
{"year": 2009, "month": 10, "day":10} //added after my edit below
]

我只想创建一个只有两个列的新数组:

newArarry = [
{"year": 2010, "month": 11}
{"year": 2009, "month": 10}
]

现在我正在尝试使用.map(),但它不起作用:

const newArray = [];
newArray.map({
    year: items.year,
    month: items.month
});

编辑

遵循以下答案之一后,我意识到我忘了提到我也需要将结果过滤为唯一的行。现在,我只选择年和月列,就得到了多个重复行

6 个答案:

答案 0 :(得分:5)

  

现在我正在尝试使用.map(),但无法正常工作

  • 因为newArray的长度为L = ['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582'] df = pd.DataFrame(np.array(L).reshape(-1, 4), columns=['code1','code2','city','area']) print (df) code1 code2 city area 0 1 42 Konya 40.838 1 42 62 Tunceli 7.582 ,而您正在尝试在其上进行映射
  • 地图接受回调,但您正在传递对象
  • 未将地图输出分配给任何变量

0

答案 1 :(得分:4)

您没有正确拨打Array#map

  1. 您需要调用 source 数组:import package package.function()
  2. 您需要提供 function 作为参数。
  3. items返回一个新数组,该数组是针对原始数组的每个成员执行该函数的结果。

Array#map

A mapping 操作从A转换为B-在这种情况下,从items = [ {"year": 2010, "month": 11, "day":23}, {"year": 2009, "month": 10, "day":15} ] const newArray = items.map(item => ({ year: item.year, month: item.month })); console.log(newArray)转换为{"year": 2010, "month": 11, "day":23}。在数组上运行{ "year": 2010, "month": 11 }会给您映射操作的结果。

答案 2 :(得分:2)

Array的.map()方法接受一个回调,该回调的返回值将用于构造新数组。错误地是将对象而不是函数传递给它。要解决此问题,您可以使用.map()进行一些对象分解:

const items = [
  {"year": 2010, "month": 11, "day":23},
  {"year": 2009, "month": 10, "day":15}
];

const result = items.map(({ year, month }) => ({year, month}));

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

答案 3 :(得分:2)

Array.map()希望将回调作为第一个参数,还必须在原始数组上调用它-否则,您实际上是在空数组上进行迭代。

var newArray = items.map(function (item) {
    return {
        year: item.year,
        month: item.month
    };
});

更新

为了确保您的数组仅包含唯一值,而不是映射和过滤,可以执行以下操作:

var items = [
    {year: 2010, month: 11, day: 23},
    {year: 2009, month: 10, day: 15},
    {year: 2009, month: 10, day: 10}
];

var newArray = [];

items.forEach(function (item) {
    var index = newArray.findIndex(function (newItem) {
        return newItem.year === item.year && newItem.month === item.month;
    });

    if (index === -1) {
        newArray.push({ year: item.year, month: item.month });
    }
});

console.log(newArray); // [{ year: 2010, month: 11 }, { year: 2009, month: 10 }]

答案 4 :(得分:1)

您没有正确使用map-您还可以通过休息,传播和破坏来简化操作:

const items = [{"year": 2010, "month": 11, "day":23},{"year": 2009, "month": 10, "day":15}];
const newArray = items.map(({ day, ...res }) => ({ ...res }));
console.log(newArray);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 5 :(得分:0)

更正您的项目数组,具有多个元素/值的数组必须用逗号分隔

var items = [{"year": 2010, "month": 11, "day":23},
               {"year": 2009, "month": 10, "day":15}]
                    const newArray = [];
                    items.map(i=>{
                    newArray.push({year: i.year, month: i.month});
                    });
                  console.log(newArray);