如何查找数组中另一个对象旁边的对象
How to find the object that's next to another object in an array?
假设我有一个数组内的objectA
:[ { name: 'ObjectA'}, { name: 'ObjectB'}, { name: 'ObjectC' } ]
如何找到ObjectA
旁边的对象(例如 ObjectB
)?
(我可以使用vanilla JavaScript或Lodash。
您可以使用Array.prototype.reduce()
:
var arr = [{
name: 'ObjectA'
}, {
name: 'ObjectB'
}, {
name: 'ObjectC'
}];
var nxt = arr.reduce(function(a, b){
return (a.name === 'ObjectA') ? b : a;
});
document.querySelector('pre').innerHTML = JSON.stringify(nxt, 0 , 4);
<pre></pre>
假设你想要下一个对象,给定当前对象的名称,试试这个。
var getNextObject = function(arr,name){
var currIndex = - 1;
arr.forEach((i,index)=>{
if(i.name === name){
currIndex = index;
};
});
if(currIndex < (arr.length - 1 && currIndex >=0)){
return arr[currIndex+1];
}
//return null if its the last element or the object with such name does not exist in the array
return null;
}
var arr = [ { name: 'ObjectA'}, { name: 'ObjectB'}, { name: 'ObjectC' } ];
//Most of the code from here on is for demonstration purposes
//
// This function call is good enough ==> getNextObject(arr,'ObjectA');
//
var nextOfObjectA = getNextObject(arr,'ObjectA');
var myprea = document.getElementById('newprea');
if(nextOfObjectA && nextOfObjectA.name){
myprea.innerHTML = nextOfObjectA.name;
}else{
myprea.innerHTML = 'does not exist';
}
var nextOfObjectC = getNextObject(arr,'ObjectC');
var myprec = document.getElementById('newprec');
//Object C is the last element, hence the function returns null
if(nextOfObjectC && nextOfObjectC.name){
myprec.innerHTML = nextOfObjectC.name;
}else{
myprec.innerHTML = 'does not exist';
}
<br/>
<p> Next Object for objectA = <span id="newprea"></span> </p>
<br/>
<p> Next Object for objectC = <span id="newprec"></span> </p>
你可以找到对象的索引(使用 findIndex),然后获取下一项。
var objArr = [ { name: 'ObjectA'}, { name: 'ObjectB'}, { name: 'ObjectC' } ];
var nextObj = objArr[objArr.findIndex(function(item, index) { return item.name == this;}, 'ObjectA')+1];
alert(JSON.stringify(nextObj));
console.log(nextObj);
试试这个
var arr = [ { name: 'ObjectA'}, { name: 'ObjectB'}, { name: 'ObjectC' } ];
var objIndex = -1;
arr.forEach( function(value, index){ if ( value.name == "ObjectA" ){ objIndex = index + 1; } } );
console.log( arr[objIndex].name );
试试这个:
function getNextOrDefault (name){
//Fetch index of item.
var index = _.findIndex(ary,function(item){
return item.name === name;
});
//If item found (!==-1) and has next item (item's index + 1 > length of array)
return (index !== -1 ? index++ : index) > ary.length || index === -1
//Return default
? null
//Return next item
: ary[index] ;
}
小提琴:https://jsfiddle.net/k4dgnzpf/
希望这有帮助!
相关文章:
- 节点导出返回一个空对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 替换另一个变量对象中的变量值
- 获取一个javascript对象attr's
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 使用来自不同异步函数的响应创建一个json对象
- Node.js-chai是一个item对象
- 想要使用Javascript将一个JSON对象拆分为多个JSON对象
- JSON:在另一个JSON对象中重用JSON对象
- 如何查找流星集合中最后一个元素/对象的id
- 从分析类传递现有对象,否则创建一个新对象
- 是我的第三方JavaScript返回html还是只是一个空对象
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 如何上传一个XML对象并用Perl将其保存在服务器上
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 将一个javascript对象推送到另一个javascript对象中
- Javascript:使用一个预先存在的对象值作为一个新对象的键
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 如何使用Typescript创建一个包含对象的字段的新对象
- 如何在 Perl 中打开一个 JavaScript 对象