Javascript:将两个数组合并为单个对象而不丢失键顺序

标签 javascript arrays mapreduce reduce

我在两个字符串中有一些原始 imdb 数据:

var headers = "ID   imdbID  Title   Year    Rating  Runtime Genre   Released    Director    Writer  Cast    Metacritic  imdbRating  imdbVotes   Poster  Plot    FullPlot    Language    Country Awards  lastUpdated";


const content = "1  tt0000001   Carmencita  1894    NOT RATED   1 min   Documentary, Short      William K.L. Dickson        Carmencita      5.8 1136    http://ia.media-imdb.com/images/M/MV5BMjAzNDEwMzk3OV5BMl5BanBnXkFtZTcwOTk4OTM5Ng@@._V1_SX300.jpg    Performing on what looks like a small wooden stage, wearing a dress with a hoop skirt and white high-heeled pumps, Carmencita does a dance with kicks and twirls, a smile always on her face.           USA     2016-05-04 00:03:31.600000000";

当然,我正在清理制表符和空格等并创建两个数组,如下所示:

const values = content.split(/(\t+)/).filter( (part) => !/\t/.test(part) );

let keys = headers.split(/(\s+)/).filter( (part) => !/\s+/.test(part) );

现在我想keys数组中的键values数组准确映射到values数组中的值。所以我像这样减少:

var result = {};

values.reduce( (acc, val, index) => {
  return result[ keys[index] ] = val; 
}, result);

这给了我一个最终的结果对象,如下所示:

 {
  Cast: "1136",
  Director: "Carmencita",
  Genre: "Documentary, Short",
  ID: "1",
  imdbID: "tt0000001",
  imdbRating: "Performing on what looks like a small wooden stage, wearing a dress with a hoop skirt and white high-heeled pumps, Carmencita does a dance with kicks and twirls, a smile always on her face.",
  imdbVotes: "USA",
  Metacritic: "http://ia.media-imdb.com/images/M/MV5BMjAzNDEwMzk3OV5BMl5BanBnXkFtZTcwOTk4OTM5Ng@@._V1_SX300.jpg",
  Poster: "2016-05-04 00:03:31.600000000",
  Rating: "NOT RATED",
  Released: "William K.L. Dickson",
  Runtime: "1 min",
  Title: "Carmencita",
  Writer: "5.8",
  Year: "1894"
}

正如你所看到的,顺序完全困惑了!如何在数据中获得正确的顺序,以便将 title 键映射到电影标题值等?

我愿意使用像 lodash 这样的库来实现这一目标,但不知道我应该使用什么?这是当前状态的 jsbin 演示:https://jsbin.com/gekawi/edit?js,console

最佳答案

如果您获取带有标签的原始数据,则可以使用它们进行拆分。

var headers = "ID	imdbID	Title	Year	Rating	Runtime	Genre	Released	Director	Writer	Cast	Metacritic	imdbRating	imdbVotes	Poster	Plot	FullPlot	Language	Country	Awards	lastUpdated",
    content = "1	tt0000001	Carmencita	1894	NOT RATED	1 min	Documentary, Short		William K.L. Dickson		Carmencita		5.8	1136	http://ia.media-imdb.com/images/M/MV5BMjAzNDEwMzk3OV5BMl5BanBnXkFtZTcwOTk4OTM5Ng@@._V1_SX300.jpg	Performing on what looks like a small wooden stage, wearing a dress with a hoop skirt and white high-heeled pumps, Carmencita does a dance with kicks and twirls, a smile always on her face.			USA		2016-05-04 00:03:31.600000000",
    headerArray = headers.split(/\t/),
    contentArray = content.split(/\t/),
    object = {};

headerArray.forEach(function (k, i) {
    object[k] = contentArray[i];
});

console.log(object);

关于Javascript:将两个数组合并为单个对象而不丢失键顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37698519/

相关文章:

hadoop - 配置单元中的 IndexOutOfBoundsException 索引

javascript - 具有异步调用的循环内的可变范围

javascript - 可以将 GWT 与基于 javascript 的框架进行比较吗?

javascript - 扩展内置数组,super() 的行为很奇怪

C++ 数组初学者

java - 在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题

javascript - 源代码管理中的 Visual Studio 2017 文件

python - 将元组列表整形为 numpy 中的 MxN 维 ndarray

arrays - 使用 Parse 查询填充数组 (Swift)

hadoop - 将数据从临时表移至登台表时,获取GC开销限制超出错误