JavaScript循环数组:比较前一个和下一个项。

huangapple go评论104阅读模式
英文:

JavaScript loop array: compare previous and next item

问题

  1. 循环数组并比较前一项和后一项。
  2. 我的数组:

const array = [{id: 1,name: 'A'},{id: 2,name: 'B'},{id: 3,name: 'B'},{id: 4,name: 'B'},{id: 5,name: 'C'},{id: 6,name: 'D'},{id: 7,name: 'E'},{id: 8,name: 'E'},{id: 9,name: 'E'}]

  1. 我的代码:

let result = []
array.forEach(function(item, index) {
if (index > 0) {
if (array[index].name == array[index - 1].name) {
result.push(array[index - 1].name)
}
}
});

console.log('result :', result); // 我得到的结果: [ 'B', 'B', 'E', 'E' ]

  1. 但我想要这个结果:

let result = [ 'B', 'B', 'B', 'E', 'E', 'E' ]

英文:

Loop array and compare the previous item and the next item.

My array:

  1. const array = [{id: 1,name: 'A'},{id: 2,name: 'B'},{id: 3,name: 'B'},{id: 4,name: 'B'},{id: 5,name: 'C'},{id: 6,name: 'D'},{id: 7,name: 'E'},{id: 8,name: 'E'},{id: 9,name: 'E'}]

My code:

  1. let result = []
  2. array.forEach(function(item, index) {
  3. if (index > 0) {
  4. if (array[index].name == array[index - 1].name) {
  5. result.push(array[index - 1].name)
  6. }
  7. }
  8. });
  9. console.log('result :', result); // The result I got: [ 'B', 'B', 'E', 'E' ]

But I want this result:

  1. let result = [ 'B', 'B', 'B', 'E', 'E', 'E' ]

答案1

得分: 1

在这种情况下,reduce 是关键

  1. let result = array.reduce((acc, curr, index) => {
  2. const previousItem = array[index - 1];
  3. if (previousItem && curr.name === previousItem.name) {
  4. acc.push(curr.name);
  5. }
  6. return acc;
  7. }, []);
  8. console.log(result); // 输出: [ 'B', 'B', 'B', 'E', 'E', 'E' ]
英文:

In such cases, reduce is the key

  1. let result = array.reduce((acc, curr, index) => {
  2. const previousItem = array[index - 1];
  3. if (previousItem && curr.name === previousItem.name) {
  4. acc.push(curr.name);
  5. }
  6. return acc;
  7. }, []);
  8. console.log(result); // Output: [ 'B', 'B', 'B', 'E', 'E', 'E' ]

答案2

得分: 1

你只需要有条件地检查前一个和后一个值。

  1. const array = [{id: 1, name: 'A'}, {id: 2, name: 'B'}, {id: 3, name: 'B'}, {id: 4, name: 'B'}, {id: 5, name: 'C'}, {id: 6, name: 'D'}, {id: 7, name: 'E'}, {id: 8, name: 'E'}, {id: 9, name: 'E'}]
  2. let result = [];
  3. array.forEach(function(item, index) {
  4. let prev = index - 1; // Previous value
  5. let next = index + 1; // Next value
  6. if(index > 0) {
  7. if((array[prev].name == array[index].name) || (array[index].name == array[next].name)) {
  8. result.push(array[index].name)
  9. }
  10. }
  11. });
  12. console.log('result: ', result);
英文:

You just need to conditionally check the previous and next value.

  1. const array = [{id: 1,name: 'A'}, {id: 2,name: 'B'}, {id: 3,name: 'B'}, {id: 4,name: 'B'}, {id: 5,name: 'C'}, {id: 6,name: 'D'}, {id: 7,name: 'E'}, {id: 8,name: 'E'}, {id: 9,name: 'E'}]
  2. let result = [];
  3. array.forEach(function(item, index) {
  4. let prev = index - 1; // Previous value
  5. let next = index + 1; // Next value
  6. if(index > 0) {
  7. if((array[prev].name == array[index].name) || (array[index].name == array[next].name)) {
  8. result.push(array[index].name)
  9. }
  10. }
  11. });
  12. console.log('result: ', result);

答案3

得分: 0

  1. // 使用:
  2. <!-- 开始代码段: js 隐藏: false 控制台: true Babel: false -->
  3. <!-- 语言: lang-js -->
  4. const array = [
  5. { id: 1, name: 'A' },
  6. { id: 2, name: 'B' },
  7. { id: 3, name: 'B' },
  8. { id: 4, name: 'B' },
  9. { id: 5, name: 'C' },
  10. { id: 6, name: 'D' },
  11. { id: 7, name: 'E' },
  12. { id: 8, name: 'E' },
  13. { id: 9, name: 'E' }
  14. ];
  15. const result = [];
  16. let prevName = null;
  17. let count = 0;
  18. array.forEach(item => {
  19. if (item.name === prevName) {
  20. count++;
  21. } else {
  22. if (count > 1) {
  23. for (let i = 0; i < count; i++) {
  24. result.push(prevName);
  25. }
  26. }
  27. prevName = item.name;
  28. count = 1;
  29. }
  30. });
  31. if (count > 1) {
  32. for (let i = 0; i < count; i++) {
  33. result.push(prevName);
  34. }
  35. }
  36. console.log('result:', result);
  37. <!-- 结束代码段 -->
英文:

Use:

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. const array = [
  2. { id: 1, name: &#39;A&#39; },
  3. { id: 2, name: &#39;B&#39; },
  4. { id: 3, name: &#39;B&#39; },
  5. { id: 4, name: &#39;B&#39; },
  6. { id: 5, name: &#39;C&#39; },
  7. { id: 6, name: &#39;D&#39; },
  8. { id: 7, name: &#39;E&#39; },
  9. { id: 8, name: &#39;E&#39; },
  10. { id: 9, name: &#39;E&#39; }
  11. ];
  12. const result = [];
  13. let prevName = null;
  14. let count = 0;
  15. array.forEach(item =&gt; {
  16. if (item.name === prevName) {
  17. count++;
  18. } else {
  19. if (count &gt; 1) {
  20. for (let i = 0; i &lt; count; i++) {
  21. result.push(prevName);
  22. }
  23. }
  24. prevName = item.name;
  25. count = 1;
  26. }
  27. });
  28. if (count &gt; 1) {
  29. for (let i = 0; i &lt; count; i++) {
  30. result.push(prevName);
  31. }
  32. }
  33. console.log(&#39;result:&#39;, result);

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年5月30日 13:09:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76361753.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定