[英]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 正如塔德曼指出的那样,您可以做到这一点
_.diff
, then append NOT DOWNLOADED
_.map
. _.diff
之间的_.diff
,然后附加NOT DOWNLOADED
_.map
。 downloadedVidsArr
and websiteVidsArr
have in common _.intersection
. downloadedVidsArr
和websiteVidsArr
有哪些共同点_.intersection
。 _.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.