我有和数组的数组看起来像这样:
var arr = [[1,2,3],[4,5,6],[7,8,9]];
之后我有一个数字列表和一个循环
var list = [15,10,11,14,13,12]
for (i=0; i<list.length; i++) {
var val = list[i];
if (val >= 10 && val < 13) {
arr[arr.length].push(val);
}
else if (val >= 13 && val < 16) {
arr[arr.length+1].push(val);
}
}
所以基本上我喜欢有一个看起来像这样的输出:
arr = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]];
使用此代码我收到错误&#34;无法读取属性&#39;推送&#39;未定义&#34;
同样重要的是我不能使用arr [3] .push或arr [4] .push,因为我的情况更复杂,我总是需要将值推送到新数组,这些数组将出现在我的阵列。无论我有多少物体。
答案 0 :(得分:4)
这种情况正在发生,因为arr[arr.length]
始终为undefined
。
所以你基本上在做
undefined.push(x);
// Cannot read property 'push' of undefined
&#34;同样重要的是我无法使用arr [3] .push或arr [4] .push,因为我的情况更复杂,我总是需要将值推送到新数组将出现在我的数组上。无论我有多少物体。&#34;
此算法为code smell,如果您发布实际代码,我们可能会帮助您更好。
要了解我正在谈论的内容,请考虑以下代码
// your numbers in a random order
var xs = [7,10,2,15,4,9,14,1,8,12,5,11,3,6,13];
// sort them
xs.sort(function(a, b) { return a-b; });
// define a function that "chunks" a list into smaller parts
function chunk(xs, n) {
function iter(ys, y, xs) {
if (y.length === 0) return ys;
return next(ys.concat([y]), xs);
}
function next(ys, xs) {
return iter(ys, xs.slice(0,n), xs.slice(n));
}
return next([], xs);
}
// call our function on your sorted list
var ys = chunk(xs, 3);
console.log(JSON.stringify(ys));
//=> [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
答案 1 :(得分:2)
def self.find_or_create(id, current_user)
cart = Cart.where(referral_guid: nil, id: id).first
if !priority_cart?(cart) && !current_user.nil?
cart = Cart.where(referral_guid: current_user.referral_guid).order("id DESC").first
end
cart.update_cart_with_referral_guid(current_user) unless current_user.nil?
cart = Cart.create unless cart
##### test 1 #####
puts("cart.inspect: #{cart.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
puts("cart.present?: #{cart.present?}") #false
puts("cart.blank?: #{cart.blank?}") #true
##### test 2 #####
find_test = Cart.find(cart.id)
puts("find_test.inspect: #{find_test.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
puts("find_test.present?: #{find_test.present?}") #false
puts("find_test.blank?: #{find_test.blank?}") #true
cart
end
永远不会返回任何有意义的内容,请考虑一下:如果你有一个长度为6的数组,那么你可以使用索引0..5。
arr [6]将永远返回undefined,因为那里什么也没有。
你可能需要这样的东西:
arr[arr.length]
答案 2 :(得分:0)
如果您正在查找数组元素,那么您的代码将无效。请参考下面的代码对元素进行排序,它也将解决您未定义的问题。
<script>
var arr = [[1,2,3],[4,5,6],[7,8,9]];
var list = [15,10,11,14,13,12];
var arr1=[];
var arr2=[];
for (i=0; i<list.length; i++) {
var val = list[i];
if (val >= 10 && val < 13) {
arr1.push(val);
}
else if (val >= 13 && val < 16) {
arr2.push(val);
}
}
arr1.sort(function(a, b){return a-b});
arr.push(arr1);
arr2.sort(function(a, b){return a-b});
arr.push(arr2);
console.log(arr);
</script>
答案 3 :(得分:0)
你需要这样的东西:
using System;
using Gtk;
using System.Threading;
using System.Diagnostics;
using System.Timers;
public partial class MainWindow: Gtk.Window
{
Stopwatch stopwatch = new Stopwatch();
System.Timers.Timer timer = new System.Timers.Timer();
bool stopClicked = false;
public MainWindow () : base (Gtk.WindowType.Toplevel)
{
Build ();
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Gtk.Application.Quit ();
a.RetVal = true;
}
protected void OnStartButtonClicked (object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(Thread1));
thread1.Start ();
stopwatch.Start ();
Console.WriteLine ("Stopwatch started");
timer.Elapsed += new ElapsedEventHandler (timerTick);
timer.Interval = 100;
timer.Enabled = true;
timer.Start ();
Console.WriteLine ("Timer started");
}
protected void OnStopButtonClicked (object sender, EventArgs e)
{
stopClicked = true;
}
void timerTick(object sender, EventArgs e)
{
timeLabel.Text = stopwatch.Elapsed.ToString ();
System.Windows.Forms.Application.DoEvents ();
}
void Thread1()
{
if(stopClicked)
{
timeLabel.Text = stopwatch.Elapsed.ToString ();
timer.Stop ();
timer.Enabled = false;
timer.Dispose ();
Console.WriteLine ("Timer stopped");
stopwatch.Stop ();
Console.WriteLine ("Stopwatch stopped");
}
}
}
&#13;