简体   繁体   English

比较2个数组,打印共有的并标记不共有的

[英]Comparing 2 arrays, printing what's in common and flagging what isn't

I have an example of my problem here. 我在这里举例说明了我的问题。 Take 2 arrays, 1 represents movies I have already downloaded and 1 represents movies yet to be download. 取2个数组,1个代表我已经下载的电影,1个代表尚未下载的电影。 I want to print a new array that is basically the 'movies yet to be downloaded' array but with flags that say "NOT DOWNLOADED" on the videos I haven't downloaded. 我想打印一个新的阵列,该阵列基本上是“尚未下载的电影”阵列,但在我尚未下载的视频上带有标有“ NOT DOWNLOADED”(未下载)的标志。

The twist is sometimes the videos are actually different but have the same name. 有时候,视频实际上是不同的,但名称相同。

Here is the fiddle: 这是小提琴:

https://jsfiddle.net/ykhch9ng/ https://jsfiddle.net/ykhch9ng/

var websiteVidsArr = ['vid1.wmv', 'vid1.wmv', 'vid2.wmv', 'vid3.wmv', 'vid4.wmv'];
var downloadedVidsArr = ['vid1.wmv', 'vid2.wmv', 'vid3.wmv'];
var nonDownloadedVidsArr = [];

for (var i = 0; i < websiteVidsArr.length; i++) {

    if (downloadedVidsArr[i] === websiteVidsArr[i]) {
      nonDownloadedVidsArr[i] = websiteVidsArr[i];
    } else {
    nonDownloadedVidsArr[i] = websiteVidsArr[i] + ' NOT DOWNLOADED';
    }
}

console.log(nonDownloadedVidsArr);
//preferred output:
//["vid1.wmv", "vid1.wmv NOT DOWNLOADED", "vid2.wmv", "vid3.wmv", "vid4.wmv NOT DOWNLOADED"] 

This solution should work. 此解决方案应该起作用。

var websiteVidsArr = ['vid1.wmv', 'vid1.wmv', 'vid2.wmv', 'vid3.wmv', 'vid4.wmv'];
var downloadedVidsArr = ['vid1.wmv', 'vid2.wmv', 'vid3.wmv'];

var tempDownloadedArr = downloadedVidsArr.slice();
var nonDownloadedVidsArr = websiteVidsArr.map(function (video) {
    var downloadedIndex = tempDownloadedArr.indexOf(video);
    if (downloadedIndex === -1) {
        return video + ' NOT DOWNLOADED'
    } else {
        tempDownloadedArr.splice(downloadedIndex, 1);
        return video;
    }
})

console.log(nonDownloadedVidsArr)

As tadman pointed out you can do this w lodash 正如塔德曼指出的那样,您可以做到这一点

  1. get the difference between the two _.diff , then append NOT DOWNLOADED _.map . 得到两个_.diff之间的_.diff ,然后附加NOT DOWNLOADED _.map
  2. find what items downloadedVidsArr and websiteVidsArr have in common _.intersection . 查找downloadedVidsArrwebsiteVidsArr有哪些共同点_.intersection
  3. put them together _.union 放在一起_.union

Code Below: 下面的代码:

var websiteVidsArr = ['vid1.wmv', 'vid1.wmv', 'vid2.wmv', 'vid3.wmv', 'vid4.wmv'];
var downloadedVidsArr = ['vid1.wmv', 'vid2.wmv', 'vid3.wmv'];
var diff = _.chain(websiteVidsArr).difference(downloadedVidsArr).map(vid => `${vid}  NOT DOWNLOADED`).value();
var result = _.chain(websiteVidsArr).intersection(downloadedVidsArr).union(diff).value();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM