在JavaScript中使用单个数组更新数组对象

时间:2017-07-18 00:41:43

标签: javascript arrays

我很难从单独的数组更新对象值。

示例:

<div class="gridlayout-row" style="padding-top: 0px;">
<div class="gridlayout-column" style="padding-left: 0px; width: calc((100% - 110px) * 0.166667 + 10px);">
    <div class="gridlayout-content">
        <label class="fieldlabel">
            <div class="fieldlabel-label">Type</div>
            <div class="fieldlabel-content">Paid</div>
        </label>
    </div>
</div>
<div class="gridlayout-column" style="padding-left: 10px; width: calc((100% - 110px) * 0.166667 + 10px);">
    <div class="gridlayout-content">
        <label class="fieldlabel">
            <div class="fieldlabel-label">Expires</div>
            <div class="fieldlabel-content">Jul 27, 2017</div>
        </label>
    </div>
</div>
<div class="gridlayout-column" style="padding-left: 10px; width: calc((100% - 110px) * 0.166667 + 10px);">
    <div class="gridlayout-content">
        <label class="fieldlabel">
            <div class="fieldlabel-label">Last update</div>
            <div class="fieldlabel-content">Jul 12, 2017</div>
        </label>
    </div>
</div>

我需要创建一个结合了这些值的新数组。

mainArray = [
    { "name": "bob", "complete": "25" },
    { "name": "john", "complete": "50" },
    { "name": "mike", "complete": "75" },        
];

colorArray = ["#ff0000", "#00ff00", "#0000ff"];

无论我做什么,我要么只能回到#0000ff,要么根本无法获得任何工作。尝试失败:

for (i = 0, ilen = mainArray.length; ilen > i; i++) {
    newArray.push({
        name: mainArray[i].name,
        complete: mainArray[i].complete,
        color: '',
    });
}

目标是回归:

for (j = 0, jlen = newArray.length; jlen > j; j++) {
    for (k = 0, km = colorArray.length; km > k; k++) {
        newArray[j].color = colorArray[k];
    }
}

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

只需根据package com.example.android.practiceapp; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; import java.io.File; public class promotions extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_promotions); final Button button = (Button) findViewById(R.id.earlybird); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v){ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/pictures/Early_Bird_Bonus_Rules"); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); Intent intent1 = Intent.createChooser(intent, "Open With"); try { startActivity(intent1); } catch (ActivityNotFoundException e) { // Instruct the user to install a PDF reader here, or something } } }); } } 的索引设置每个人的color键。

colorArray

答案 1 :(得分:0)

使用Array.mapObject.assign的更实用的方法看起来像

&#13;
&#13;
var mainArray = [
    { "name": "bob", "complete": "25" },
    { "name": "john", "complete": "50" },
    { "name": "mike", "complete": "75" },        
];
var colorArray = ["#ff0000", "#00ff00", "#0000ff"];

var newArray = mainArray.map((x, i) =>
  Object.assign({}, x, {color: colorArray[i]})
)
 
console.log(newArray);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

下面有一个不必要的嵌套循环:

for (j = 0, jlen = newArray.length; jlen > j; j++) {
    for (k = 0, km = colorArray.length; km > k; k++) {
        newArray[j].color = colorArray[k];
    }
}

您可以将其更改为:

for (j = 0, jlen = newArray.length; jlen > j; j++) {
    newArray[j].color = colorArray[j];
}