找到数组中与其余对象不同的第一个对象

时间:2017-10-19 01:44:02

标签: javascript arrays loops

我正在将对象推入一个数组中,并且在某个时刻,一组不同的对象被推入数组中。我遇到的问题是在不同对象的第一个实例中返回一个值。

例如:假设我的最终数组如下所示:

    // receive Code!
    private byte[] indexBuffer = new byte[sizeof(UInt16)];
    private int indexSize = sizeof(UInt16);

    public async void receiveData(TcpClient client) {
       var result = await Task.Run(() => {
           try {
               int checkSum = client.Client.Receive(indexBuffer, 0, indexBuffer.Length, SocketFlags.None);
               if (checkSum != indexSize) return null;

               int packageSize = BitConverter.ToUInt16(indexBuffer, 0);
               Console.WriteLine(packageSize);
               var recData = new Byte[packageSize];

               checkSum = client.Client.Receive(recData, 0, packageSize, SocketFlags.None);
               if (checkSum != packageSize) return null;
               return Encoding.ASCII.GetString(recData);
           } catch(Exception ex) {
               Console.WriteLine(ex.Message);
               return "-1";
           }
        });

        // blabla do something 
        Console.WriteLine(result);

        //---------------------
        if (client.Connected) 
           receiveData(client);
    }

如何遍历数组并返回第一个id的值。所以这种情况应该返回1.

5 个答案:

答案 0 :(得分:1)

您可以使用Array#find()

var myArray = [
  {name:'some name 1', value:'some value 1'},
  {name:'some name 2', value:'some value 2'},
  {name:'some name 3', value:'some value 3'},
  {name:'new name 1', standout:'this stands out 1', id:1},
  {name:'new name 2', standout:'this stands out 2', id:2},
  {name:'new name 3', standout:'this stands out 3', id:3},
];

var obj = myArray.find(o => o.id),
    id= obj ? obj.id : 'None';

console.log('First Id is: ', id)

答案 1 :(得分:0)

当您达到for出现的条件时,您可以使用break循环和id遍历您的收藏集:

var myArray = [
  {name:'some name 1', value:'some value 1'},
  {name:'some name 2', value:'some value 2'},
  {name:'some name 3', value:'some value 3'},
  {name:'new name 1', standout:'this stands out 1', id:1},
  {name:'new name 2', standout:'this stands out 2', id:2},
  {name:'new name 3', standout:'this stands out 3', id:3},
];

function getFirstId(arr) {
  var id;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i].id) {
      id = arr[i].id;
      break;
    }
  }

  return id;
}

getFirstId(myArray); //1

答案 2 :(得分:0)

您也可以使用ES6 syntex,即Array.find:

function findFirstId(myArray){
   return myArray.find((obj) => obj.id !== undefined).id;
}

有关Array.find的更多信息:https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/find

答案 3 :(得分:0)

如果您对不同对象的定义是这些对象具有不同的属性,则以下代码可能对您有所帮助。

基于Mozilla docs

  

Object.keys()方法返回给定对象拥有的可枚举属性的数组

var x = [];
for (var i = 0; i < myArray.length; i++) {
    x.push(Object.keys(myArray[i]));
}
var gotit;
for (i = 1; i < x.length; i++) {
    if (x[0].toString() != x[i].toString()) {
        gotit = x[i];
        break;
    }
}
console.log(gotit);

答案 4 :(得分:0)

检查出来:

&#13;
&#13;
//<![CDATA[
// external.js
var doc, bod, C, E, inArray, FirstOfKind, old = onload; // for use on other loads
onload = function(){
if(old)old(); // change var name if using technique on other pages
doc = document; bod = doc.body;
C = function(tag){
  return doc.createElement(tag);
}
E = function(id){
  return doc.getElementById(id);
}
inArray = function(v, a){
  for(var i=0,l=a.length; i<l; i++){
    if(a[i] === v){
      return true;
    }
  }
  return false;
}
FirstOfKind = function(objsArray){
  function same(o1, o2){
    var v;
    for(var i in o1){
      if(!o2.hasOwnProperty(i)){
        return false;
      }
    }
    return true;
  }
  for(var a=[0],i=0,q=1,l=objsArray.length; q<l; i++,q++){
    if(!same(objsArray[i], objsArray[q]))a.push(q);
    
  }
  this.getIndexes = function(){
    return a;
  }
  this.getFirsts = function(){
    for(var i=0,f=[],l=a.length; i<l; i++){
      f.push(objsArray[a[i]]);
    }
    return f;
  }
}
var myArray = [
  {name:'some name 1', value:'some value 1'},
  {name:'some name 2', value:'some value 2'},
  {name:'some name 3', value:'some value 3'},
  {name:'new name 1', standout:'this stands out 1', id:1},
  {name:'new name 2', standout:'this stands out 2', id:2},
  {name:'new name 3', standout:'this stands out 3', id:3}
]
var fk = new FirstOfKind(myArray), fi = E('fi'), fo = E('fo');
var fI = fk.getIndexes(), fO = fk.getFirsts();
for(var i=0,li,lo,ff,oa=[],l=fI.length; i<l; i++){
  li = C('li'); li.innerHTML = fI[i]; fi.appendChild(li);
  lo = C('li'); ff = fO[i];
  for(var q in ff){
    oa.push("'"+q+"' : '"+ff[q]+"'");
  }
  lo.innerHTML = '{'+oa.join(', ')+'}'; fo.appendChild(lo);
}
}
//]]>
&#13;
/* external.css */
html,body{
  padding:0; margin:0;
}
body{
  background:#000; overflow-y:scroll;
}
.main{
  width:936px; background:#fff; padding:20px; margin:0 auto;
}
&#13;
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
  <head>
    <meta http-equiv='content-type' content='text/html;charset=utf-8' />
    <meta name='viewport' content='width=device-width' />
    <title>FirstOfKind</title>
    <link type='text/css' rel='stylesheet' href='external.css' />
    <script type='text/javascript' src='external.js'></script>
  </head>
<body>
  <div class='main'>
    <div id='output'>
      <ul>
        <li>.getIndexes()</li>
        <li><ul id='fi'></ul></li>
        <li>.getFirsts()</li>
        <li><ul id='fo'></ul></li>       
      </ul>
    </div>
  </div>
</body>
</html>
&#13;
&#13;
&#13;