我需要能够根据另一个数组中包含的id过滤数组。基本上,我有一个tweet id数组,在我操作的hashtag对象中包含一个特定的hashtag。 h.tweet_ids = [*someTweetID*, *someOtherTweetID*, …]
另一方面,我有userTimeline数组,其中包含验证用户发送的所有推文。
它的结构如此(https://dev.twitter.com/rest/reference/get/statuses/user_timeline):
[
{
"coordinates": null,
"favorited": false,
"truncated": false,
"created_at": "Wed Aug 29 17:12:58 +0000 2012",
"id_str": "240859602684612608",
"entities": {
…
},
"in_reply_to_user_id_str": null,
"contributors": null,
"text": "Introducing the Twitter Certified Products Program: https://t.co/MjJ8xAnT",
"retweet_count": 121,
"in_reply_to_status_id_str": null,
"id": 240859602684612608,
"geo": null,
"retweeted": false,
"possibly_sensitive": false,
"in_reply_to_user_id": null,
"place": null,
"user": {
…
},
"in_reply_to_screen_name": null,
"source": "<a href="//sites.google.com/site/yorufukurou/\"" rel="\"nofollow\"">YoruFukurou</a>",
"in_reply_to_status_id": null
},
{
"coordinates": null,
"favorited": false,
"truncated": false,
"created_at": "Sat Aug 25 17:26:51 +0000 2012",
"id_str": "239413543487819778",
"entities": {
…
},
"in_reply_to_user_id_str": null,
"contributors": null,
"text": "We are working to resolve issues with application management & logging in to the dev portal: https://t.co/p5bOzH0k ^TS",
"retweet_count": 105,
"in_reply_to_status_id_str": null,
"id": 239413543487819778,
"geo": null,
"retweeted": false,
"possibly_sensitive": false,
"in_reply_to_user_id": null,
"place": null,
"user": {
…
},
"in_reply_to_screen_name": null,
"source": "<a href="//sites.google.com/site/yorufukurou/\"" rel="\"nofollow\"">YoruFukurou</a>",
"in_reply_to_status_id": null
}
]
我想要实现的是过滤userTimeline以仅检索其id(即userTimleine[i].id_str
)是h.tweet_ids
中的ID的推文。
目前,我在循环中尝试了一个循环,但不知何故它有时会失败进入一个无限循环......
$scope.showTweetsForHashtag = function(h){
var userTimeline = $scope.userTimeline,
tweetId=h.tweetId,
hTweets = [];
for (var i = 0; i < tweetId.length; i++) {
for (var j = 0; j < userTimeline.length; j++) {
if (userTimeline[j].id_str===tweetId[i]) {
hTweets.push(userTimeline[j]);
}
}
}
$scope.selHash=h.Hashtag;
$scope.hTweets=hTweets;
if (!$scope.hModal) {
$scope.hModal=true
}
};
提前感谢您的帮助!
干杯 ^ Q
答案 0 :(得分:0)
使用lodash,我会做类似的事情:
var users = [
{
"coordinates": null,
"favorited": false,
"truncated": false,
"created_at": "Wed Aug 29 17:12:58 +0000 2012",
"id_str": "240859602684612608",
"entities": {
},
"in_reply_to_user_id_str": null,
"contributors": null,
"text": "Introducing the Twitter Certified Products Program: https://t.co/MjJ8xAnT",
"retweet_count": 121,
"in_reply_to_status_id_str": null,
"id": 240859602684612608,
"geo": null,
"retweeted": false,
"possibly_sensitive": false,
"in_reply_to_user_id": null,
"place": null,
"user": {
},
"in_reply_to_screen_name": null,
"source": "",
"in_reply_to_status_id": null
},
{
"coordinates": null,
"favorited": false,
"truncated": false,
"created_at": "Sat Aug 25 17:26:51 +0000 2012",
"id_str": "239413543487819778",
"entities": {
},
"in_reply_to_user_id_str": null,
"contributors": null,
"text": "We are working to resolve issues with application management & logging in to the dev portal: https://t.co/p5bOzH0k ^TS",
"retweet_count": 105,
"in_reply_to_status_id_str": null,
"id": 239413543487819778,
"geo": null,
"retweeted": false,
"possibly_sensitive": false,
"in_reply_to_user_id": null,
"place": null,
"user": {
},
"in_reply_to_screen_name": null,
"source": "",
"in_reply_to_status_id": null
}
];
var tweet_ids = ["240859602684612608", "000000"];
var matchIds = _.intersection(_.pluck(users, 'id_str'),tweet_ids );
var matchTweets = _.filter(users,function(userTmp){
return matchIds.indexOf(userTmp.id_str) !== -1 ;
})
console.log(matchTweets);
$("body").append(JSON.stringify(matchTweets))
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>
<body></body>
&#13;
答案 1 :(得分:0)
嗯,没有Lodash,我找到了一条路!
$scope.showTweetsForHashtag = function(h) {
var userTimeline = $scope.userTimeline,
tweetId = h.tweetId,
hTweets = [];
if (Array.isArray(tweetId)) {
for (var i = 0; i < tweetId.length; i++) {
var hTweet = userTimeline.filter(function(el) {
return el.id_str === tweetId[i];
});
hTweets = hTweets.concat(hTweet);
}
$scope.hTweets = hTweets;
} else {
$scope.hTweets = userTimeline.filter(function(el) {
return el.id_str === tweetId;
});
}
$scope.selHash = h.Hashtag;
if (!$scope.hModal) {
$scope.hModal = true
}
};
非常感谢您的帮助!
^ Q
答案 2 :(得分:0)
使用Array.prototype.filter
之类的var tweet_ids = [1,2,3,5,8,13,21];
var tweets = [{
'id_str': 1
}, {
'id_str': 4
}, {
'id_str': 8
}, {
'id_str': 11
}];
var filtered = tweets.filter(function (t) {
for (var i = 0, len = tweet_ids.length; i < len; i++) {
if (tweet_ids[i] == t.id_str)
return true;
}
});
console.log(filtered);
:
var polyFeatures = featureOverlay.getSource();
var coordsMulti = [];
var coordsSingle = [];
polyFeatures.forEachFeature(function (polyFeature) {
if (polyFeature.getGeometry().getType() === 'Polygon') {
// this will get you all polygon coordinates
coordsMulti.push(polyFeature.getGeometry().getCoordinates());
// this will get you central coordinate of polygon
coordsSingle.push(polyFeature.getGeometry().getInteriorPoint());
}
});