所以,我有此数据,假设我正在尝试查找包含特定日期的数组的索引(比如说'2018-01-03')
var arr = [
[{ id: 'A1', start: '2018-01-01' }, { id: 'A2', start: '2018-01-01' }], // 0
[{ id: 'B1', start: '2018-01-02' }, { id: 'B2', start: '2018-01-02' }], // 1
[{ id: 'C1', start: '2018-01-03' }, { id: 'C2', start: '2018-01-03' }] // 2 <<<Want this index which should be 2
];
在我的arr
数组中,我有另一组数组-每个数组都有一个特定日期的事件。我的目标是找到具有特定日期的数组的数组索引。下面是我目前拥有的东西,但是我从错误的数组中获取索引(我认为)。
var date = '2018-01-03';
var currentIndex = _.findIndex(arr, function(obj) {
return obj[0].start == date ;
}); //currentIndex should equal 2
我感觉自己正在正确启动,但是也许我还需要映射一些东西?
编辑 我没有使用ES6,所以我认为箭头功能不会对我有用。
答案 0 :(得分:1)
在使用moment
时,isSame
可用于检查相同的日期。
注意:由于Firefox不支持RFC2822或ISO格式以外的日期格式,因此需要立即提供格式。
var arr = [
[{ id: 'A1', start: '2018-01-01' }, { id: 'A2', start: '2018-01-01' }], // 0
[{ id: 'B1', start: '2018-01-02' }, { id: 'B2', start: '2018-01-02' }], // 1
[{ id: 'C1', start: '2018-01-03' }, { id: 'C2', start: '2018-01-03' }] // 2 <<<Want this index which should be 2
];
function result(date)
{
return arr.findIndex(function(value){
return value.find(function(val){
return moment(val.start,"YYYY-MM-DD").isSame(moment(date,"YYYY-MM-DD"));
});
});
}
console.log(result('2018-01-02'));
console.log(result('2018-01-01'));
console.log(result('2018-01-03'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 1 :(得分:0)
您正在使用Vanilla JavaScript的array#findIndex
和array#some
寻找类似的内容:
<form class=" jumbotron browseCategory bs1">
<h3 class="catSearch">SEARCH ADS USING CATEGORY SEARCH</h3> <br/> <hr/>
<div class="form-group">
<label for="formGroupExampleInput2"> Select your category : </label>
<select id="myselect">
<option value="1">Mobile</option>
<option value="2">Electronics</option>
<option value="3">Property</option>
<option value="4">Cosmetics</option>
</select> </div>
<button type="submit" class="btn btn-primary" id="submission_cat">Search Ad of this Category</button>
</form>
ES6之前的版本:
var arrN = [
[{ id: 'A1', start: '2018-01-01' }, { id: 'A2', start: '2018-01-01' }], // 0
[{ id: 'B1', start: '2018-01-02' }, { id: 'B2', start: '2018-01-02' }], // 1
[{ id: 'C1', start: '2018-01-03' }, { id: 'C2', start: '2018-01-03' }] // 2 <<<Want this index which should be 2
];
var date = '2018-01-03';
// if each element of sub-array has same date
console.log('index of '+ date + " is --> " + arrN.findIndex(e => e[0].start == date));
// if each element of sub-array do not have same date
console.log(arrN.findIndex(e => e.some(obj => obj.start == date)));
答案 2 :(得分:0)
如果findIndex
和Array.some
用于内部数组,请使用组合键:
let availableIndex = arr.findIndex(a => a.some(b => b.start === date)); //2 for your example