Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查对象是否不是数组中的第一个或最后一个,但是否存在重复项?_Javascript_Arrays_Object - Fatal编程技术网

Javascript 如何检查对象是否不是数组中的第一个或最后一个,但是否存在重复项?

Javascript 如何检查对象是否不是数组中的第一个或最后一个,但是否存在重复项?,javascript,arrays,object,Javascript,Arrays,Object,我有一个包含10个对象的数组 当我在弹出窗口中打开某个对象时,我需要知道数组中的下一个或上一个对象是数组中的最后一个还是第一个 若是数组中的第一个或最后一个,则需要禁用“下一个”或“上一个”按钮 问题是,有些文档具有相同的ID,我通过ID检查对象的索引: const index=documents.findIndexitem=>item.id==id 然后,如果数组中的第一个和第四个对象具有相同的ID,它将返回索引:0,始终: 如何使这项工作按预期进行 此阵列只是一个示例: documents

我有一个包含10个对象的数组

当我在弹出窗口中打开某个对象时,我需要知道数组中的下一个或上一个对象是数组中的最后一个还是第一个

若是数组中的第一个或最后一个,则需要禁用“下一个”或“上一个”按钮

问题是,有些文档具有相同的ID,我通过ID检查对象的索引:

const index=documents.findIndexitem=>item.id==id

然后,如果数组中的第一个和第四个对象具有相同的ID,它将返回索引:0,始终:

如何使这项工作按预期进行

此阵列只是一个示例:

documents = [
 {id: 'TEST1', name: 'TEST1'},
 {id: '2', name: '2'},
 {id: '3', name: '3'},
 {id: 'TEST1', name: 'TEST1'},
 {id: '4', name: '4'},
 {id: '5', name: '5'}
]
稍后,我使用索引禁用或启用“上一个”或“下一个”按钮。

使用Array.indexOf通过引用查找当前项的索引:

documents.map(doc => (

 if(doc===documents[documents.length-1]) || (doc===documents[0]) { 

   // apply the code for disabling next and prev buttons
   }
))
const documents=[{id:TEST1,name:TEST1},{id:2,name:2},{id:3,name:3},{id:TEST1,name:TEST1},{id:4,name:4},{id:5,name:5}]; const current=文件[3]; const index=documents.indexOfcurrent; console.logindex 这是因为findIndex返回数组中满足提供的测试函数的第一个元素的索引

因此,您可以使用lastIndexOf:

例如:

让文档=[ {id:'TEST1',name:'TEST1'}, {id:'2',name:'2'}, {id:'3',name:'3'}, {id:'TEST1',name:'TEST1'}, {id:'4',name:'4'}, {id:'5',name:'5'} ]; 让find='TEST1'; const result=documents.maps=>s.id.lastIndexOffind; console.logresult 可以使用.filter获取所需id的所有值, 例如:


索引应该是id为Test1的3?是,但documents.findIndexitem=>item.id==id;将始终返回索引:0,但我不知道下一个或上一个对象值数据正在更改dynamically@MarkJames你能澄清一下你的意思吗?你知道你的id吗?我知道当前打开的对象的id。通过这个ID我找到了当前的索引。然后我减少或增加一个索引值,得到下一个或上一个文档。问题是cus在数组中,我可以有2个或更多完全相同的对象。@MarkJames你能写测试用例吗?这对理解你想要什么非常有帮助
const result = documents.map(s=> s.id).lastIndexOf(find);
let documents = [
  {id: 'TEST1', name: 'TEST1'},
  {id: '2', name: '2'},
  {id: '3', name: '3'},
  {id: 'TEST1', name: 'TEST1'},
  {id: '4', name: '4'},
  {id: '5', name: '5'}
 ];
const things = documents.filter((documents) => documents.name === id)

console.log(things)